首先看一段他人的一段文章:from: http://www.cnblogs.com/super119/archive/2011/10/11/2207541.html
我们通过map的erase(iterator it)方法删除元素的时候,如果此时erase处于遍历map的代码中,那么调用erase就需要小心一些。因为erase会导致输入参数iterator变的无效,从而影响后续的it++遍历map的逻辑。
简单做法是,先将要删除的it保存下来,然后将用于遍历map的it指向下一个位置,然后删除掉保存下来的it。如下面代码所示:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<string, string> map1;
map<string, string>::iterator mapit;
map<string, string>::iterator saveit;
map1["1"] = "2";
map1["2"] = "3";
map1["3"] = "4";
map1["4"] = "5";
cout << "Map s