C 容器之對映map的基本操作

2021-10-08 14:04:49 字數 3019 閱讀 2095

目錄

c++容器之對映map

map容器在記憶體中存在的形式

為什麼用map容器?

map容器的基本操作

map的常用成員函式

函式列表

反向迭代器rbegin()與rend()的使用

迭代器begin()與end()的使用

find()查詢函式與swap()交換函式的使用

插入函式insert()的使用

如上圖:第乙個值稱之為關鍵字(key),每個關鍵字只能在map**現一次,是唯一的;第二個稱之為該關鍵字的對應值。

例如:學校中的學生,用學生的什麼資訊作為 key 呢?可以用學號,在校的學生學號不可能重複,所以可以用學號作為key,學生的姓名或者學生資訊作為value,value可以重複,可以相同,畢竟有重名的情況發生。

優點查詢起來很快:根據 key 值快速查詢記錄,查詢的複雜度基本是 log(n),如果有1000個記錄,最多查詢10次,1,000,000個記錄,最多查詢20次。怎麼樣快吧?所以,當大家以後的工程中有比較多的使用想快速查詢的話可以使用map。

// map容器.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。  

//  

#include #include using namespace std;  

int main()  

函式名功能

maps.insert() 當陣列用

插入maps.find()

查詢乙個元素

maps.clear()

清空maps.erase()

刪除乙個元素

maps.size()

長度maps.begin()

返回指向map頭部的迭代器

maps.end()

返回指向map末尾的迭代器

maps.rbegin()

返回乙個指向map尾部的逆向迭代器

maps.rend()

返回乙個指向map頭部的逆向迭代器

maps.empty()

如果map為空則返回true

swap()

交換兩個map

//反向迭代,根據key排序的,我的key是string,故是字典序排序,從z-a  

map::reverse_iterator iter;  

for(iter = maps.rbegin(); iter != maps.rend(); iter++)  

cout//迭代,根據key排序的,我的key是string,故是字典序排序,從a-z

map::iterator iter;  

for(iter = maps.begin(); iter != maps.end(); iter++)  

cout#include #include using namespace std;

int main()  

mapmapobj;  

mapobj[7] = 'f';  

mapobj[8] = 'm';  

mapobj[9] = 'f';  

mapobj.swap(stud);  

map::iterator iter1 = stud.find(9);  

// find成員函式返回迭代器型別的值,類似於返回指標,注意:這裡的操作物件都是key而非value  

cout }

簡介」pair」的用法

如果乙個函式有兩個返回值的話,如果是相同型別,就可以用陣列返回,如果是不同型別,兩個屬性的話,就可以用pair 進行操作,有多個屬性的時候 ,可以使用tuple。

pair的呼叫格式

pairp (5,6);

pairp1= make_pair(5,6);

pairp2 ("aa",5.0);

pair p3 = make_pair("aa",5.0);

map容器與pair的搭配使用

map可以當做乙個容器(裝載具有一定格式的資料);pair可以理解為元素(放入到容器的的每個個體),pair並沒有單獨行動的典型用法,正常都是配合map來使用(即把pair這個元素插入到map這個容器裡面)。

通過map的insert()可以把乙個pair物件作為map 的引數,如map1.insert(pair1);

因為map中的儲存的是key-value鍵值對,因此裡面的資料是成對出現的,那我們也要成對的插入資料才行。

#include #include using namespace std;  

// 由於map容器中key的唯一性,因此map中所有的成員函式都是對key進行操作  

int main()  

mapmapobj;  

mapobj[7] = 'f';  

mapobj[8] = 'm';  

mapobj[9] = 'f';  

//mapobj[9] = 'm'; // 如果相同的key不相同的value,後面的會將前面的覆蓋掉  

mapobj.swap(stud);  

map::iterator iter1 = stud.find(9);  

// find成員函式返回迭代器型別的值,類似於返回指標,注意:這裡的操作物件都是key而非value  

cout // count成員函式通常用於檢驗map容器中有沒有這個key  

int shownum = mapobj.count(10012);  

cout <

cout <

stud.insert(pair(10, 'm'));  

pairinsertpair(11, 'f');  

stud.insert(insertpair);  

cout <

cout <

}

map容器的基本操作

僅供了解 c 中map容器提供乙個鍵值對容器,map與multimap差別僅僅在於multiple允許乙個鍵對應多個值。一 map的說明 1 標頭檔案 include 2 定義 mapmy map 或者是typedef mapmy map my map my map 3 插入資料 1 my map ...

《實用C 》第50課 C 容器之對映map

1 什麼是 map,他跟 vector 和 list 有什麼區別?什麼情況下使用 map?map提供的是一種鍵值對的容器,裡面的資料元素都是成對出現的,即 key value,在知道 key 的情況下能迅速的找到 value,他們是一一對應的關係。如下圖 第乙個值稱之為關鍵字 key 每個關鍵字只能...

C STL常用容器總結之八 對映map

map是鍵 值對的集合,map中的所有元素都是pair,可以使用鍵作為下標來獲取乙個值。map中所有元素都會根據元素的值自動被排序,同時擁有實值value和鍵值key,pair的第一元素被視為鍵值,第二元素被視為實值,同時map不允許兩個元素有相同的鍵值。要使用map物件,必須包含map的標頭檔案 ...