Map 的数据结构其实是一种平衡二叉树 (红黑树)。
因此其内部并不是一块内存,而是不同的节点。所以当我们做插入,删除时,只是改变节点。因此速度会很快。
参考:http://blog.csdn.net/sauphy/article/details/52089245
http://www.cnblogs.com/fly1988happy/archive/2012/03/06/2381559.html
注意在一个迭代中,不能直接删除map
#include "stdafx.h"
#include <string>
#include <map>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
map<string,int> my_Map;
//typedef map<string,int> MY_MAP;
//MY_MAP my_Map2;
my_Map["a"] = 1;
my_Map.insert(map<string,int>::value_type("b",2));
my_Map.insert(pair<string,int>("c",3));
my_Map.insert(make_pair<string,int>("d",4));
string strErase = "";
map<string,int>::iterator my_Iter;
//方法一
//在一个迭代周期中,map成员不能被删除
//只能记录位置,再迭代完成后再删除
for (my_Iter = my_Map.begin(); my_Iter != my_Map.end();++my_Iter)
{
cout<<my_Iter->first<<" = "<<my_Iter->second<<endl;
if (3 == my_Iter->second)
{
strErase = my_Iter->first;
}
}
my_Map.erase(strErase);
for (my_Iter = my_Map.begin(); my_Iter != my_Map.end();++my_Iter)
{
cout<<my_Iter->first<<" = "<<my_Iter->second<<endl;
}
//方法二
//请在使用方法二时,注释所有方法一的代码
my_Iter = my_Map.begin();
while(my_Iter != my_Map.end())
{
if (3 == my_Iter->second)
{
string strErasetemp = my_Iter->first;
my_Iter++;
my_Map.erase(strErasetemp);
}else{
my_Iter++;
}
}
for (my_Iter = my_Map.begin(); my_Iter != my_Map.end();++my_Iter)
{
cout<<my_Iter->first<<" = "<<my_Iter->second<<endl;
}
system("PAUSE");
return 0;
}