在C ++矢量除去重复项(Remove Duplicate Entries in a C++ Vec

2019-09-02 10:59发布

只是想删除重复。 游泳池是vector<pair<string, int>>但我似乎在矢量开始莫名其妙地错过一些元素。 任何人都可以验证是否删除的逻辑是什么? 谢谢 :)

Pool Master::eliminateDuplicates(Pool generation)
{
    for(int i = 0; i < generation.size(); i++)
    {
        string current = generation.at(i).first;

        for(int j = i; j < generation.size(); j++)
        {
            if(j == i)
            {
                continue;
            }
            else
            {
                string temp = generation.at(j).first;
                if(current.compare(temp) == 0)
                {
                    Pool::iterator iter = generation.begin() + j;
                    generation.erase(iter);
                }
            }
        }
    }

    return generation;
}

Answer 1:

这是一个非常普遍的问题。

因为你删除一个元素的位置j指出将跳过一个元素,由于在第j ++ for循环之后。 解决基于你的代码问题的最简单的方法是generation.erase(ITER)之后增加j--:

  generation.erase(iter);
  j--;


Answer 2:

如果你不介意的排序向量,那么你可以使用std::unique 。 这将是O(n日志(N))

#include <iostream>
#include <algorithm>
#include <vector>

int main() 
{
    std::vector<int> v{1,2,3,1,2,3,3,4,5,4,5,6,7};
    std::sort(v.begin(), v.end()); 
    auto last = std::unique(v.begin(), v.end());
    v.erase(last, v.end());
    for (const auto& i : v)
      std::cout << i << " ";
    std::cout << "\n";
}


文章来源: Remove Duplicate Entries in a C++ Vector