如何有效地擦除向量中的重复元素

时间:2011-03-17 06:26:11

标签: c++

我有

 vector<string> data ; // I hold some usernames in it

在那个向量中,我有重复的元素,所以我想擦除这个/这些元素。是否有任何算法或库函数来擦除重复的元素?

ex :
    In data;
           abba, abraham, edie, Abba, edie
    After operation;
           abba, abraham, edie, Abba

4 个答案:

答案 0 :(得分:10)

如果您可以对容器中的元素进行排序,那么直接且相对有效的解决方案将是:

std::sort(data.begin(), data.end());
data.erase(std::unique(data.begin(), data.end()), data.end());

答案 1 :(得分:0)

我不确定是否有一个非常好的方法。 我要做的就是排序(在不同的数组中,如果你需要原文),然后贯穿它。

答案 2 :(得分:0)

“set”不允许重复。您可以使用它来过滤掉重复项。

  1. 创建一个
  2. 添加所有用户名以设置
  3. 创建新的向量
  4. 将所有元素从set添加到vector

答案 3 :(得分:0)

如果你真的需要有效地做,那么应该首先进行排序,然后自己通过容器而不是使用std :: unique,将唯一的项目提取到新的向量中,然后结束交换。

我刚检查了std :: unique的源代码,找到一个副本时会做很多动作,移动会伤害矢量的性能。