map(映射)c++

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;
}

猜你喜欢

转载自blog.csdn.net/dong_qian/article/details/81380783