【发布时间】:2013-05-04 18:35:13
【问题描述】:
只想删除重复项。池是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;
}
【问题讨论】:
-
你介意它是否被排序?
-
一种更简单(并且可能比目前采用的
O(n^2)方式更快的方式)是将所有元素添加到std::set,然后返回到std::vector。跨度> -
另外,我假设你的意思是
Pool是vector<pair<string, int>>? -
我认为集合只能基于整数数据类型工作?我正在比较字符串重复项。编辑是的,对不起错字;)
-
这个语句 if(j == i){continue;} 有必要吗?你可以从 i+1 开始循环。
标签: c++ vector duplicate-removal erase