【问题标题】:How to remove duplicates from std::vector <std::pair<UnicodeString, UnicodeString> >如何从 std::vector <std::pair<UnicodeString, UnicodeString>> 中删除重复项
【发布时间】:2011-07-20 10:17:14
【问题描述】:

如何删除重复值

std::vector <std::pair<UnicodeString, UnicodeString> > myVect;

是否有任何内置函数或者我需要为此编写自定义代码

【问题讨论】:

  • unique() 删除相邻的重复项,因此您可以对向量进行排序,然后执行 unique()。
  • 如果您希望容器中只有唯一值,请考虑使用 std::set。

标签: c++ stl stdvector


【解决方案1】:

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

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

只要确保 UnicodeString 接受

但是,您可能希望使用不同的结构,例如 std::set 或 std::unordered_set 在插入时获得唯一保证。

【讨论】:

    【解决方案2】:

    假设 (a) std::set 不是您想要的 [也就是说,您希望在您的 std::vector 中允许重复元素,只是为了稍后删除它们] 并且 (b) 您不希望更改std::vector 中元素的顺序[即当前顺序很重要],这都是合理的情况...您应该能够将Fred Nurk's answer 调整为How can I remove duplicate values from a list in C++ 购买用vector 替换list并相应地修改less 比较器。

    【讨论】:

    • 但是,如果他将 Fred 的答案与 vector 一起使用,他不会得到 O(N^2) 的行为,因为 vector::erase() 是 O(N) 而 list::erase() 是 O(1 )?有没有适用于向量的解决方案?
    • @Rob:好点子。因为,我不知道 (a) std::set 是否可以接受,(b) @jame 是否可以 sort 向量或 (c) 速度是否是一个问题,我现在将保持原样.
    猜你喜欢
    • 2022-10-24
    • 2020-12-26
    • 2013-08-18
    • 2011-01-01
    • 2019-07-11
    • 1970-01-01
    • 2013-05-04
    • 2013-03-08
    • 2014-05-24
    相关资源
    最近更新 更多