1.map翻译为映射,也是常用的STL容器。

map可以将任何基本类型(包含STL容器)映射到任何基本类型(包含STL容器),也就可以建立string型到int型的映射。

如果要使用map,需要添加map头文件,即#include<map>。除此之外,还需要在头文件下面加上一句:“using namespace std;”,这样就可以在代码中使用map了。

2.map的定义:

单独定义一个map:

map<typename1,typename2> mp;

map 和其他STL容器在定义上有点不一样,因为map需要确定映射前的类型(键 key)和映射后类型(值 value),所以需要在<>内填写两个类型,其中第一个是键的类型,第二个是值的类型。如果是int 型映射到 int 型,就相当于是普通int 型数组。

而如果是字符串到整型的映射,必须使用 string 而不能用 char 数组:

map<string,int> mp;

这是因为 char 数组作为数组,是不能被作为键值的。如果想用字符串作映射,必须用 string 。

       另外同vector容器一样,map的键和值也可以是STL容器,例如可以将一个set容器映射到一个字符串;

map<set<int>,string> mp;

3.map容器内元素的访问

map一般用两种访问方式:通过下标访问或通过迭代器访问。

4.map的访问方式:

(1)通过下标访问:  直接使用 mp ['c'] 的方式来访问它对应的整数。  需要注意的是,同 set 容器相同,map 中的键是唯一的。

(2)通过迭代器访问:和其他迭代器的定义方式相同:

map<typename1,typename2>:: iterator it;      

(3) 访问方式map可以使用 it->first 来访问键,使用 it->second 来访问值。

5.具体实现如下:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#include<map>
int main()
{
	map<char,int> mp;
	mp['c']=20;
	mp['c']=30;
	mp['m']=20;
	mp['r']=30;
	mp['a']=40;
	//for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)
	for(map<char,int>::iterator it=mp.begin();it!=mp.end();it++)    //运用迭代器依次输出 !! map会以键从小到大的顺序自动排序 
	{
		cout<<it->first<<" "<<it->second<<endl;
	}
	cout<<mp.size()<<endl;
	map<char,int>::iterator it=mp.find('r');
	cout<<it->first<<" "<<it->second<<endl; 
	map<char,int>::iterator tt=mp.find('a');
	cout<<tt->first<<" "<<tt->second<<endl;				//运用迭代器单个指定输出 
	//mp.erase(tt);                                      //单个删除 
	mp.erase('c');                                        //另一种单个删除 
	mp.erase(it,mp.end());									//进行区间删除 
	cout<<mp.size()<<endl;									//输出删除后的区间长度 
	mp.clear();
	cout<<mp.size()<<endl;
	//cout<<mp['c']<<endl;									//输出 mp['c'];
	return 0;
}

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐