只想删除重复项。 Pool是vector<pair<string, int>>,但是我似乎以某种方式错过了 vector 开始处的一些元素。谁能验证删除的逻辑?谢谢 :)

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;
}

最佳答案

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

因为在删除一个元素后,由于for循环上的j++,指向j的位置将跳过一个元素。
根据您的代码解决问题的最简单方法是在generation.erase(iter)之后添加j--:

  generation.erase(iter);
  j--;

关于c++ - 删除C++ vector 中的重复条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16476099/

10-13 06:11