我需要带有可能包含大量元素的C++向量,擦除重复项并对其进行排序.
我目前有以下代码,但它不起作用.
vec.erase(
std::unique(vec.begin(), vec.end()),
vec.end());
std::sort(vec.begin(), vec.end());
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确地做到这一点?
此外,首先擦除重复项(类似于上面编码)或首先执行排序是否更快?如果我首先执行排序,是否保证在std::unique执行后保持排序?
或者还有另一种(也许是更有效的)方法来做这一切吗?
使用STL算法(尽可能多),例如remove_if()和list::erase,有一种很好的方法可以从定义如下的列表中删除重复项:
list<int> l;
请注意,list::unique()仅当连续元素中出现重复时才有效.就我而言,无论在列表中的位置如何,都必须删除所有重复项.此外,删除重复意味着在最终结果中仅保留每个元素的一个副本.
编辑:l.sort()后面的选项l.unique()无法使用,因为这将破坏列表的顺序.
如何从中删除重复值
std::vector <std::pair<UnicodeString, UnicodeString> > myVect;
Run Code Online (Sandbox Code Playgroud)
是否有任何内置函数或我需要为此编写自定义代码