1.2常见C++STL ------映射表-

一、映射表

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

posted @ 2021-12-14 13:13  zhustarstar  阅读(1113)  评论(0编辑  收藏  举报