#include <iostream>
#include <cstring>
#include <map>
using namespace std;
/**map提供了任何数据类型到任何数据类型的映射,而普通的数组只能提供int型到其他类型的映射
(如数组:char A[10],A[1]=‘c’,则就是int型到char型的映射,数字1映射到字符‘c’)
map的定义:map<typename_key,typename_value) mp; //尖括号内是映射前类型key和映射后类型value>**/
int main()
{
map<char,int> mp; //设置一个char映射到int类型的map
mp['a']=10;
mp['c']=20;
mp['b']=30;
mp['d']=40;
mp['e']=50;
mp['f']=60;
mp['g']=70;
mp['h']=80;
//访问(通过数组下标)
cout<<"mp['a']="<<mp['a']<<endl;
//访问(通过迭代器)
for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
cout<<it->first<<":"<<it->second<<endl;
//注意:map内部会以键值从小到大自动排序(从第二种访问输出结果可以看出)
//find(key) 查找,函数返回键为key的映射的迭代器(相当于指针)
map<char,int>::iterator it=mp.find('b');
cout<<"find---"<<it->first<<":"<<it->second<<endl;
//erase() 删除元素
it=mp.find('c');
mp.erase(it); //删除单个元素,参数为指向某元素的迭代器
cout<<"输出:"<<endl;
for(it=mp.begin();it!=mp.end();it++)
cout<<it->first<<":"<<it->second<<endl;
mp.erase('e'); //删除单个元素,参数为欲删除的键key
cout<<"输出:"<<endl;
for(it=mp.begin();it!=mp.end();it++)
cout<<it->first<<":"<<it->second<<endl;
it=mp.find('g');
mp.erase(it,mp.end()); //删除区间内所有元素,参数为迭代器,注意区间左闭右开
cout<<"输出:"<<endl;
for(it=mp.begin();it!=mp.end();it++)
cout<<it->first<<":"<<it->second<<endl;
//size() 获得map中映射对数
cout<<"size:"<<mp.size()<<endl;
//clear() 清空map中所有元素
mp.clear();
cout<<"size:"<<mp.size()<<endl; //size=0
return 0;
}
map的常见用途:
1. 需要建立字符/字符串与整数之间映射的题目,使用map可以减少代码量;
2. 判断大整数(整数过大以至于不适合使用int数组)或其他类型数据是否存在的题目,可以把map当做bool数组使用;
3. 字符串与字符串之间的映射也有可能遇到。
另外:
map中键和值是唯一对应的关系,如果想要一个键对应多个值,需要使用mutilmap。除此之外,C++ 11标准中增加了unordered_map,可以不对key进行排序,比map速度要快许多。