map是一类关联式容器,内部是红黑树。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。
对于迭代器来说,可以修改实值,而不能修改key。
1、构造map
map<int, string> mymap;
2、插入数据
使用insert插入pair
mymap.insert(pair<int, string>(1, "one"));
使用insert插入value_type数据
mymap.insert(map<int, string>::value_type (1, "one"));
数组方式插入
mymap[1] = "one";
第一第二种方法效果相同,当map已经有这个关键字时会插入无效。第三种如果已有关键字则会覆盖。
3、数据的遍历
map<int, string>::reverse_iterator iter;
for(iter = mymap.begin(); iter != mymap.end(); iter++)
cout<<iter->first<<" "<<iter->second<<endl;
begin和end前面加个’r’,就是反向迭代器。
用数组下标遍历:
int nSize = mymap.size();
//此处应注意,应该是 for(int nindex = 1; nindex <= nSize; nindex++)
//而不是 for(int nindex = 0; nindex < nSize; nindex++)
for(int nindex = 1; nindex <= nSize; nindex++)
cout<<mymap[nindex]<<endl;
4、map的查找
map<int, string>::iterator iter;
iter = mymap.find(1);
if(iter != mymap.end())
cout<<"Find, the value is "<<iter->second<<endl;
else
cout<<"Do not Find"<<endl;
5、删除元素
如果要删除1,用关键字删除
int n = mymap.erase(1);//如果删除了会返回1,否则返回0
用迭代器删除一个
map<int, string>::iterator iter;
iter = mapStudent.find(1);
mapStudent.erase(iter);
用迭代器成片删除
mapStudent.erase( mymap.begin(), mymap.end() );