關聯容器
關聯容器和順序容器的本質差別在於:關聯容器通過鍵(key)儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。
關聯容器(associativecontainer)的元素按鍵排序和訪問,支援通過鍵來高效地查詢和讀取元素。
map的元素以鍵—值(key-value)對的形式組織:鍵用作元素在map中的索引,而值則表示所儲存和讀取的資料。
set僅包含乙個鍵,並有效地支援關於某個鍵是否存在的查詢。
map關聯陣列:元素通過鍵來儲存和讀取
set大小可變的集合,支援通過鍵實現的快速讀取
multimap
支援同乙個鍵多次出現的 map 型別
multiset
支援同乙個鍵多次出現的 set 型別
pair型別
#include
pairp1;
建立乙個空的 pair 物件,它的兩個元素分別是 t1 和 t2 型別,採用值初始化
pairp1(v1, v2);
建立乙個 pair 物件,它的兩個元素分別是 t1 和 t2 ,其中 first 成員初始化為 v1,而 second 成員初始化為 v2
make_pair(v1, v2)
以 v1 和 v2 值建立乙個新 pair 物件,其元素型別分別是 v1 和 v2 的型別
p1 < p2
兩個 pair 物件之間的小於運算,其定義遵循字典次序:如果 p1.first < p2.first 或者 !(p2.first < p1.first) && p1.second < p2.second,則返回 true
p1 == p2
如果兩個 pair 物件的 first 和 second 成員依次相等,則這兩個物件相等。該運算使用其元素的 == 操作符
p.first
返回 p 中名為 first 的(公有)資料成員
p.second
返回 p 的名為 second 的(公有)資料成員
pair物件的操作
對於pair類,可以直接訪問其資料成員:其成員者都是公有的,分別命名為first和second。
關聯容器
根據鍵排列元素:在迭代遍歷關聯容器時,我們可確保按鍵的順序訪問元素,而與元素在容器中的存放位置完全無關。
map型別
關聯本質在於元素的值與某個特定的鍵相關聯,而並非通過元素在陣列中的位置來獲取。
map的定義
mapm;
建立乙個名為 m 的空 map 物件,其鍵和值的型別分別為 k 和 v
mapm(m2);
建立 m2 的副本 m,m 與 m2 必須有相同的鍵型別和值型別
mapm(b, e);
建立 map 型別的物件 m,儲存迭代器 b 和 e 標記的範圍內所有元素的副本。元素的型別必須能轉換為 pair
鍵型別的約束
鍵型別必須定義< 操作符,而且該操作符應能「正確地工作」。
map定義的型別
map::key_type
在 map 容器中,用做索引的鍵的型別
在 map 容器中,鍵所關聯的值的型別
map::value_type
對迭代器進行解引用時,將獲得乙個引用,指向容器中乙個value_type型別的值。
給map新增元素
使用下標訪問map物件
下標操作符返回該鍵所關聯的值(下標操作符返回的型別與迭代器的解引用返回型別不同,這點與vector和string型別不同)。
map::insert的使用
m.insert(e)
e 是乙個用在 m 上的 value_type 型別的值。如果鍵(e.first)不在 m 中,則插入乙個值為 e.second 的新元素;如果該鍵在 m 中已存在,則保持 m 不變。該函式返回乙個 pair 型別物件,包含指向鍵為 e.first 的元素的 map 迭代器,以及乙個 bool 型別的物件,表示是否插入了該元素
m.insert(beg, end)
beg 和 end 是標記元素範圍的迭代器,其中的元素必須為 m.value_type 型別的鍵-值對。對於該範圍內的所有元素,如果它的鍵在 m 中不存在,則將該鍵及其關聯的值插入到 m。返回 void 型別
m.insert(iter, e)
e 是乙個用在 m 上的 value_type 型別的值。如果鍵(e.first)不在 m 中,則建立新元素,並以迭代器 iter 為起點搜尋新元素儲存的位置。返回乙個迭代器,指向 m 中具有給定鍵的元素
查詢並讀取map中的元素
m.count(k)
返回 m 中 k 的出現次數
m.find(k)
如果 m 容器中存在按 k 索引的元素,則返回指向該元素的迭代器。如果不存在,則返回超出末端迭代器
count適合用於解決判斷map容器中某鍵是否存在的問題,而find適合用於解決在map容器中查詢指定鍵對應的元素的問題。
set型別
set容器只是單純的鍵的集合。
#include
multimap和multiset型別
multimap和multiset型別允許乙個鍵對應多個例項。
在multimap中,同乙個鍵所關聯的元素必然相信存放。
m.lower_bound(k)
返回乙個迭代器,指向鍵不小於 k 的第乙個元素
m.upper_bound(k)
返回乙個迭代器,指向鍵大於 k 的第乙個元素
m.equal_range(k)
返回乙個迭代器的 pair 物件
它的 first 成員等價於 m.lower_bound(k)。而 second 成員則等價於 m.upper_bound(k)
C Primer 筆記 關聯容器
關聯容器 associative container 支援通過鍵來高效的查詢和讀取元素。map 關聯陣列,元素通過鍵來儲存和讀取 set 大小可變的集合,支援通過鍵來快速讀取 multimap 支援同乙個鍵出現多次的map型別 multiset 支援同乙個鍵多次出現的set型別 pairp1 建立乙...
c 筆記 關聯容器
map中的元素是一些關鍵字 值對,即鍵值對 set支援搞笑的關鍵字查詢操作,即檢查乙個給定的關鍵字是否在set中。型別map和multimap定義標頭檔案map中,型別set和multiset定義在標頭檔案set中。無序容器則定義在unordered map和unordered set中 按關鍵字有...
《C Primer》學習筆記 關聯容器
一,pair型別 pairp1 建立乙個空pair指標,兩個元素分別是t1,t2型別,採用值初始化 pairp1 v1,v2 first成員初始化為v1,second成員為v2 make pair v1,v2 建立新的pair物件 p1 p2 p1 p2 p.first 返回first成員 p.se...