1、简介
map存储的是键值对[key: value],提供一对一的存储
关键字(key)在map中只能出现一次
值(value):每个key都有一个对应的值map会自动建立key-value的对应,并且会根据key值自动排序(升序)
2、map的声明
//你可以根据需要设置map中key和value的数据类型
map<int,int> m;
3、map的插入
注意前两种方法,当key存在时不能插入数据,但是数组方式在key值存在时依然能插入(覆盖原来的value值)
//1、pair类型插入
m.insert(pair<int,int>(1,0));
//2、value_type插入
m.insert(map<int,int>::value_type(2,0));
//3、数组方式插入
m[3]=0;//map是可以通过key值作为下标新建或者访问的
4、map的遍历
//使用迭代器遍历
for(map<int,int>::iterator::iter=m.begin();iter!=m.end();iter++)
{
cout<<iter->first<<" "<<iter->second<<endl;
}
//for遍历
for(auto &ch: m)
{
cout<<ch->first<<" "<<ch->second<<endl;
}
5、map的查找元素、判断是否存在
//find函数如果查找成功返回该键值对地址,失败则返回m.end()
map<int,int>::iterator iter=m.find(2);
if(iter!=m.end())
cout<<iter->second;
else
cout<<"No";
//判断元素是否存在
//1、find函数
map<int,int>::iterator iter=m.find(2);
if(iter!=m.end())
cout<<"Yes";
else
cout<<"No";
//2、count函数,包含该元素时返回1,否则为0
if(count(m.begin(),m.end(),2)
cout<<"Yes";
else
cout<<"No";
6、常用成员函数
m.begin();//返回一个迭代器,指向字符串的第一个元素
m.end();//返回一个迭代器,指向字符串的末尾(最后一个字符的下一个位置
m.rebegin();//返回一个逆向迭代器,指向字符串的最后一个字符
m.rend();//返回一个逆向迭代器,指向字符串的开头(第一个字符的前一个位置)
m.size();//返回map大小
m.erase(iter);//删除一个元素
m.empty();//判空
7、map按value值排序
typedef pair<int,int> PAIR;
//比较器
//按value值进行降序排序,value值相等key小的在前
bool cmp_value(const PAIR& lhs,const PAIR& rhs)
{
if(lhs.second == rhs.second)
{
return lhs.key<rhs,second;
}
return lhs.second > rhs.second;
}
sort(m.begin(),m,end(),cmp_value);