如何从c ++中的列表中删除重复值?

she*_*har 5 c++

我是c ++的新手并且遇到了问题.我正在使用列表来存储字符串值.现在我想从该字符串中删除重复的值.谁能告诉我这是怎么做到的.

任何示例代码都将非常感激.

Fre*_*urk 14

如果列表已排序,请使用其唯一方法.

如果列表未排序(并且您不想对其进行排序):

set<string> found;
for (list<string>::iterator x = the_list.begin(); x != the_list.end();) {
  if (!found.insert(*x).second) {
    x = the_list.erase(x);
  }
  else {
    ++x;
  }
}
Run Code Online (Sandbox Code Playgroud)

为避免将字符串复制到集合中:

struct less {
  template<class T>
  bool operator()(T &a, T &b) {
    return std::less<T>()(a, b);
  }
};
struct deref_less {
  template<class T>
  bool operator()(T a, T b) {
    return less()(*a, *b);
  }
};

void remove_unsorted_dupes(list<string> &the_list) {
  set<list<string>::iterator, deref_less> found;
  for (list<string>::iterator x = the_list.begin(); x != the_list.end();) {
    if (!found.insert(x).second) {
      x = the_list.erase(x);
    }
    else {
      ++x;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • +1表示不破坏现有订单的示例 (3认同)

Ale*_* C. 13

使用sort后跟unique.

  • @MatthieuM.:需要切片和拼接时,或者需要在任何地方插入/删除而不会使任何其他迭代器失效.:) (2认同)

ltj*_*jax 7

如果您有,std::list您可以删除重复项:

yourlist.sort();
yourlist.unique();
Run Code Online (Sandbox Code Playgroud)