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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM