map<key, values> 是c++中的关联容器,提供很好的一对一的关系。
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值;
增加和删除节点对迭代器的影响很小;
对于迭代器来说,可以修改实值,而不能修改key;
查找的时间很少,基本是log(N)
一、map的说明
1 头文件
#include <map>
2 定义
map<string, int> myMap;
3 插入数据
(1) myMap["sujw"] = 28;
(2) myMap.insert(map<string, int>::value_type("chenh",23));
(3) myMap.insert(pair<string,int>("huanghd",26));
(4) myMap.insert(make_pair<string,int>("meit",24));
4 查找数据和修改数据
(1)下标方式:int i = myMap["sujw"];
myMap["sujw"] = 29; //有则赋值,无则新增。
(2)迭代器遍历:myMap::iterator my_Itr;
for (my_Itr = myMap.begin(); my_Itr != myMap.end(); my_Itr++){
cout<<my_Itr->first<<"\t"<<my_Itr->second<<endl;
}
void ModifyMap(int key, string value)
{
std::map<int, string>::iterator it;
it = myMap.find(key);
if(it == myMap.end())
myMap.insert(std::make_pair(key, value));
else
{
it->second = value;
}
}
不过注意,键本身是不能被修改的,除非删除。
5 删除数据
(1) myMap.erase(my_Itr);
(2) myMap.erase("sujw");
还是注意,第一种情况在迭代期间是不能被删除的,道理和foreach时不能删除元素一样。
6 迭代数据
for (my_Itr=myMap.begin(); my_Itr!=myMap.end(); ++my_Itr) {}
7 其它方法
myMap.size() 返回元素数目
myMap.empty() 判断是否为空
myMap.clear() 清空所有元素
可以直接进行赋值和比较:=, >, >=, <, <=, != 等等