目錄
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
簡介」pair」的用法//反向迭代,根據key排序的,我的key是string,故是字典序排序,從z-a
map::iterator iter;map::reverse_iterator iter;
for(iter = maps.rbegin(); iter != maps.rend(); iter++)
cout//迭代,根據key排序的,我的key是string,故是字典序排序,從a-z
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 進行操作,有多個屬性的時候 ,可以使用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的標頭檔案 ...