C++在擦除时循环遍历地图

dev*_*uma 1 c++

要用c ++循环遍历地图,我们就像这样做

map<string,int> mymap;
map<string,int>::iterator it= mymap.begin();
while(it!=mymap.end()) {
   //code here
   it++;
}
Run Code Online (Sandbox Code Playgroud)

如果在"代码在这里"部分我有一个if语句,如果评估为true,它会从地图中删除一个元素怎么办?我的代码应如何更改,以便仍然按顺序循环遍历所有mymap元素?

BoB*_*ish 5

http://en.cppreference.com/w/cpp/container/map/erase:

擦除元素的引用和迭代器无效.其他引用和迭代器不受影响.

(因此,请确保擦除之前增加并保存"下一个"迭代器.

编辑:事实上,因为C++11,erase无论如何返回下一个迭代器,所以你可以使用它.)