gpt4 book ai didi

c++ map,在使用扩展for循环迭代时删除元素是否安全?

转载 作者:行者123 更新时间:2023-11-30 04:44:48 25 4
gpt4 key购买 nike

<分区>

我有一张 map ,其中键是整数,值是整数 vector 。现在这些 vector 包含一些重复的元素,我想删除它们。所以,我正在使用

sort(map.begin(),map.end())
map.erase(unique(map.begin(),map.end()),map.end());

一切正常。但是当我像

这样使用扩展 for 循环时
for(auto i:map)

那么这不起作用,但是当我使用时它起作用了:

for(auto i=map.begin();i!=map.end();i++)

完整代码如下:

#define loopi(i,n) for(int i=0;i<n;i++)
map<int,vector<int>>m;
m[0]={1,22,22,3};
m[2]={2,1,11,11,1,6};
m[5]={2,2,2,33,5};
for(auto i:m){
cout<<i.second.size()<<endl;
sort(i.second.begin(),i.second.end());
i.second.erase(unique(i.second.begin(),i.second.end()),i.second.end());
cout<<i.second.size()<<endl;
loopi(j,i.second.size()) cout<<i.second[j]<<" ";
cout<<endl;
}
cout<<endl;
for(auto i:m){
cout<<i.second.size()<<endl;
loopi(j,i.second.size()) cout<<i.second[j]<<" ";
cout<<endl;
}

我得到输出:

4
3
1 3 22
6
4
1 2 6 11
5
3
2 5 33

4
1 22 22 3
6
2 1 11 11 1 6
5
2 2 2 33 5

并使用这个:

    for(auto i=m.begin();i!=m.end();i++){
cout<<i->second.size()<<endl;
sort(i->second.begin(),i->second.end());
i->second.erase(unique(i->second.begin(),i->second.end()),i->second.end());
cout<<i->second.size()<<endl;
loopi(j,i->second.size()) cout<<i->second[j]<<" ";
cout<<endl;
}
cout<<endl;
for(auto i=m.begin();i!=m.end();i++){
cout<<i->second.size()<<endl;
loopi(j,i->second.size()) cout<<i->second[j]<<" ";
cout<<endl;
}

对于这种情况,我得到输出:

4
3
1 3 22
6
4
1 2 6 11
5
3
2 5 33

3
1 3 22
4
1 2 6 11
3
2 5 33

因此,在第一种情况下,它不会删除元素。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com