一、映射表
1、映射表
映射:两个集合之间的对应关系,一个元素对应另一个元素
C++中map函数定义在<map>头文件中,将代码引入头文件
#include<map> using namespace std;
2、构造映射
map<T1,T2> m 定义一个名为m,从T1到T2的映射,这时候m是一个空映射,map<string ,int> t 定义了一个从string 到int 的映射,我们可以把一个字符串和一个整数关联起来
3、插入一对映射insert()
insert()是向集合中插入一个新映射,参数是pair
pair 是标准库类型,定义在头文件utility,参数有两个,一个first,另一个second,并且重载<运算符,先比较first,再比较second,当我们创建一个pair,必须提供两个类型
例如 pair<string,int> t 定义一个保存string和int的pair类型的变量t
make_pair(T1,T2) 返回由T1和T2组成的初始化的pair
加入映射的过程就是插入pair的过程,如果插入的时候key已经存在,就不会插入新的value代替以前的value,也就是这次插入无效
#include<iostream> #include<map> #include<utility> using namespace std; int main(){ map<string,int> dict; //定义了一个从姓名到班级的映射,key:姓名 value:班级 初始化是空 dict.insert(make_pair("Tom",1)); //{"Tom"->1} dict.insert(make_pair("Jack",2)); //{"Tom"->1,"Jack"->2} dict.insert(make_pair("Jack",3)); //{"Tom"->1,"Jack"->2},"Jack"在集合已经存在 } }
4、访问映射
dict【“Jack”】,访问“Jack”对应的值,如果“Jack”在集合中不存在,那么返回集合对应的初始值,int是0,string是空字符串
但是我们有时候仅仅是想做一个查找的操作,并不是想要插入映射,所以我们要提前检验映射是否存在,然后查找映射对应的值
5、判断关键字是否存在
判断关键字是否存在,可以使用count()函数,如果关键字存在返回1,不存在返回06、
#include<iostream> #include<map> #include<utility> using namespace std; int main(){ map<string,int> dict; //定义了一个从姓名到班级的映射,key:姓名 value:班级 初始化是空 dict.insert(make_pair("Tom",1)); //{"Tom"->1} dict.insert(make_pair("Jack",2)); //{"Tom"->1,"Jack"->2} dict.insert(make_pair("Jack",3)); //{"Tom"->1,"Jack"->2},"Jack"在集合已经存在 if(dict.count("Jack")){ //判断 “Jack”是否存在 cout << "Jack" << dict["Jack"] << endl; }else{ cout << "Jack不存在" << endl; } } }
6、映射迭代器
(*it).first 指向关键字,(*it).second指向关键字对应的值,C++遍历的过程是按照关键字从小到大排列的,和集合类似
#include<iostream> #include<map> #include<utility> using namespace std; int main(){ map<string,int> dict; //定义了一个从姓名到班级的映射,key:姓名 value:班级 初始化是空 dict.insert(make_pair("Tom",1)); //{"Tom"->1} dict.insert(make_pair("Jack",2)); //{"Tom"->1,"Jack"->2} dict.insert(make_pair("Jack",3)); //{"Tom"->1,"Jack"->2},"Jack"在集合已经存在 for(map<string,int>::iterator it = dict.begin(); it != dict.end();it++){ cout <<(*it).first << " " << (*it).second << endl; //first是关键值,second是对应的值 } }
7、清空映射
调用clear()函数清空集合元素和内存
C++map官方文档 :http://www.cplusplus.com/reference/map/map/erase/
二、二维映射
类似vector套vector,二维映射采用map套set,例如一个班有很多学生,我们使用set来存储班级姓名,
定义数据结构 map<int ,set<string> > 定义班级到班级对应所有学生姓名的映射,两个 >中间的空格不能少,例如对2班同学我们执行,dict[2].insert("Jack")从2班插入学生jack
还可以map 套map
三