1. 程式人生 > 其它 >1.2常見C++STL ------對映表-

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