一、映射表
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
三