【发布时间】:2020-05-20 19:38:49
【问题描述】:
我正在使用无序映射来检查向量中的重复项,然后将其删除。有时 unordered_map 返回 -1。我很困惑为什么会发生这种情况
int removeDuplicates(vector<int>& nums) {
map<int, int> hash_table;
for(int i=0; i<nums.size(); i++)
{
cout<<nums[i]<<" : "<<hash_table[nums[i]] <<", ";
hash_table[nums[i]] = hash_table[nums[i]] + 1;
cout<<nums[i]<<" : "<<hash_table[nums[i]] <<"\n\n";
if(hash_table[nums[i]] > 1)
{
//cout<<"Erasing "<<nums[i]<<"\n";
nums.erase(nums.begin() + i);
hash_table[nums[i]] = hash_table[nums[i]] - 1;
}
}
cout<<"\n";
return nums.size();
}
这是输入:
[0,0,1,1,1,2,2,3,3,4]
这是标准输出:
0 : 0,
0 : 1
0 : 1,
0 : 2
1 : -1,
1 : 0
1 : 0,
1 : 1
2 : 0,
2 : 1
2 : 1,
2 : 2
3 : -1,
3 : 0
4 : 0,
4 : 1
编辑:我最初输入错误。它已被编辑! (关于stackoverflow的第一篇文章!!我正在学习!)
【问题讨论】:
-
建议,不要在这里使用地图。使用一套。
if ( !set.insert( nums[i] ).second ) { *remove from array* }
标签: c++ duplicates hashtable unordered-map