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
三