要在c ++中循环遍历地图,我们就像这样
map<string,int> mymap;
map<string,int>::iterator it= mymap.begin();
while(it!=mymap.end()) {
//code here
it++;
}
如果在“代码在这里”部分我有一个if语句,如果评估为true,它会从地图中删除一个元素怎么办?我的代码应如何更改,以便它仍按顺序遍历所有 mymap 元素?
答案 0 :(得分:5)
http://en.cppreference.com/w/cpp/container/map/erase:
擦除元素的引用和迭代器无效。其他 引用和迭代器不受影响。
(因此,请确保在删除之前递增并保存“下一个”迭代器。
编辑:事实上,自C++11
以来,erase
无论如何都会返回下一个迭代器,所以你可以使用它。)
答案 1 :(得分:2)
你可能想在删除一个元素时重新分配你的迭代器,因为它不会有效......否则......
it = mymap.erase(...)
答案 2 :(得分:2)
为避免在擦除时使用迭代器使用迭代器,循环体应如下所示:
if (should_erase) {
it = my_map.erase(it); // C++11: returns the next iterator
my_map.erase(it++); // Historic C++: no helpful return value
} else {
++it;
}