map的定义:
map 是一种关联容器,是从(键)key到(值)value的映射,因为重载了[ ] 运算符,map像是数组中的高级版
例如,可以使用map<string ,int month_name这样的一种映射来表示月份名字到月份编号的映射关系。然后使用
month_name<"July">=7,的形式来赋值,其中键和值的类型可以是任何你需要的类型,都可以进行映射。
map的相关操作:
元素的插入
,1, 使用insert()方法插入一个元素或一个元素范围,参数是pair类型(元组),我们向映射中加入新的映射的时候就是
通过加入pair来实现的,如果插入的key已经有了对应的value,则此次插入无效,而如果想让关键字重复出现的话 ,
可以用multmap。
更方便的插入元素的方式就是:m["March"]=3;如果"March"之前没有做过映射,m["March"]=3,赋值的时候回自动
形成一个映射,然后赋上相应的值,如果"March"之前做过映射,也就相当于改变赋值的大小了。
访问映射
直接使用m[ ] 就可以直接访问,例如m["March"] 就可以知道m["March"]等于几了
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
int main()
{
map<string,int> m;
string s;
int num;
cin >> s >> num;
m.insert(pair<string,int>(s,num));
m.insert(pair<string,int>("july",7));
m["January"]=1;
m["March"]=3;
cout << m["july"] << "\n" << m["March"] << endl;
return 0;
}
键(key)的查找
,2,’m.find(k); //返回第一个j键(key)=k的元素的位置
3,m.count(k) ;// 返回键(key)为k的数量,对于一个不允许重复数字出现的映射关系,返回值只能是0或者1,代表有或者没有
4,m.lower_bound(k);//返回键中第一个大于等于k的元素的位置
5,m.upper_bound(k);//返回键中第一个大于k的元素的位置
6,m.equal_range(k);//返回pair,表示键中k的范围。
当从map中得到一个元素时,会得到一个pair类型的对象,pair是一个模板,保存两个名字为first和second的数据成员,pair用first成员保存键(key),second保存对应的值(value);
储存在map中的数默认的排序是以键(key)按字典序从小到大,排列而成。所以从map的头地址处开始遍历的顺序便是从小到大。
键的删除
7,m.erase("july"),既可以将键为July的元素删除。
对于不重复容器,earse()的返回值总是0或1,若erase()的返回值为0,则表示想要删除的元素不在容器中,
即删除成功就返回1,删除失败就返回0; 对于重复容器,earae()返回值可能大于1。
8,map的清空
m.clear()可以清空map
9,m.empty ()是个bool类型,可以查看map中的元素是否为空,如果为空返回true,不为空返回为false
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
int main()
{
map<string,int> m;
string s;
int num;
cin >> s >> num;
m.insert(pair<string,int>(s,num));
m.insert(pair<string,int>("july",7));
m["March"]=3;
m["January"]=1;
m.insert(pair<string,int>("October",10));
if(m.count("October")!=0)
cout << "October" << ' ' << m["October"] <<endl;
// 迭代器,代地址
for( map<string,int>::iterator it = m.begin(); it != m.end(); it++){
cout<< it->first<< " "<< it->second<< endl;
}
if(m.erase("January")==1)
cout << "January remove" << endl;
m.clear();
if(m.empty()==true)
cout << "map clear" << endl;
return 0;
}