只想删除重复项。池是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;
}
答案 0 :(得分:19)
如果您不介意对矢量进行排序,则可以使用std::unique
。那将是O(Nlog(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";
}
答案 1 :(得分:4)
这是一个非常常见的问题。
因为擦除元素后,由于for循环中的j ++,j指向的位置将跳过一个元素。 基于代码解决问题的最简单的解决方案是在生成后添加j--.erase(iter):
generation.erase(iter);
j--;