我需要获取一个可能包含很多元素的 C++ 向量,删除重复项并对其进行排序。
我目前有以下代码,但它不起作用。
vec.erase(
std::unique(vec.begin(), vec.end()),
vec.end());
std::sort(vec.begin(), vec.end());
我怎样才能正确地做到这一点?
此外,先删除重复项(类似于上面的代码)还是先执行排序更快?如果我确实先执行排序,是否保证在执行 std::unique
后保持排序?
还是有另一种(可能更有效)的方式来完成这一切?
原文由 Kyle Ryan 发布,翻译遵循 CC BY-SA 4.0 许可协议
我同意 R. Pate 和 Todd Gardner 的观点; a
std::set
在这里可能是个好主意。即使您无法使用向量,但如果您有足够的重复项,您最好创建一个集合来完成这些繁琐的工作。让我们比较三种方法:
仅使用向量,排序+唯一
转换为设置(手动)
转换为集合(使用构造函数)
以下是这些随着重复数量的变化而变化的表现:
摘要:当重复的数量足够大时, _转换为集合然后将数据转储回向量实际上更快_。
出于某种原因,手动进行集合转换似乎比使用集合构造函数更快——至少在我使用的玩具随机数据上是这样。