记录六:C++中对字符串数组vector<string>去重

对于字符串数组vector<string>去重,有以下三种方法(准确的是两种吧):

(一)先排序、后去重

  • 采用sort函数 (头文件#include <algorithm>)  —— 这时候vector容器元素是从小到大排序好的
  • 采用unique函数(头文件#include <algorithm>) —— 将容器中重复的元素放到vector的尾部,返回指向第一个重复元素的迭代器
  • 采用vector自带的erase函数(头文件#include <vector>) —— 删除vector中的一段元素

具体代码如下↓

void DeleteDuplicated(vector<string> &name)
{
	sort(name.begin(), name.end());
	name.erase(unique(name.begin(), name.end()), name.end());
}

(二)利用set、unordered_set容器

  • 因为这两个容器的关键字是唯一的
  • 因此以元素是否能在unordered_set容器中插入成功作为判断依据
  • 如果插入成功 就将该值赋给迭代器指向的下一个值 并将判断迭代器下移一位

具体代码如下↓

void remove(vector<string> &str)
{
	vector<string>::iterator itr = str.begin();
	unordered_set<string> s;
	for (auto curr = str.begin(); curr != str.end(); ++curr)
	{
		if (s.insert(*curr).second)//判断是否能插入成功
		{
			*itr++ = *curr;//如果成功 就将当前的值赋给到当前迭代器的下一位
		}
	}
	str.erase(itr, str.end());//循环完一遍后 当前迭代器的位置就是字段唯一值的末尾
}

(三)同样利用set、unordered_set容器

如果不是一定要用vector容器来装载字符串 可以考虑直接用set、unordered_set容器来存储!

目前从时间复杂度的角度上来说,第二种方法应该是最快的,其时间复杂度为O(n)。

 

会继续补充,找到效率最快、最高的方法....

(如果有请补充 哪里说错了也请指出!

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值