如何从std::vector <std::pair<UnicodeString, UnicodeString> >中删除重复项

3
如何从中删除重复值
std::vector <std::pair<UnicodeString, UnicodeString> > myVect;

有没有内置的函数可以用,还是需要编写自定义代码来实现这个功能?

3
unique() 函数可以去除相邻的重复元素,所以你可以先对向量进行排序,然后再使用 unique() 函数。 - DumbCoder
6
如果你希望容器中仅包含唯一值,请考虑使用 std::set。 - johnsyweb
看一下类似的问题 https://dev59.com/UnNA5IYBdhLWcg3wPLP- - Oleg Svechkarenko
2个回答

6
假设(a)你不想要一个std::set,因为你想允许在std::vector中有重复的元素,只是想稍后将它们删除;(b)你不想改变std::vector中元素的顺序(也就是说,当前的顺序很重要),这两种情况都很合理......你应该能够根据Fred Nurk的答案如何从C++列表中删除重复值进行调整,将list替换为vector并相应地修改less比较器。

但是,如果他使用Fred的答案与vector,他会得到O(N^2)的行为,因为vector::erase()是O(N),而list::erase()是O(1)。是否有一种适用于向量的解决方案? - Robᵩ
@Rob:说得好。由于我不知道(a)是否可以使用std::set,(b) @jame是否可以对向量进行sort,或者(c)速度是否是一个问题,所以我现在将保留我的答案。 - johnsyweb

2

如果您可以修改向量中的顺序,则最好的方法如下:

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

请确保UnicodeString接受<运算符。

然而,您可能希望使用不同的结构,如std::set或std::unordered_set,在插入时具有唯一性保证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接