目錄:
兩個問題:
與順序容器一樣,是一種特定型別物件的集合,不同的是,元素是通過關鍵字而不是位置來索引。
我們知道c++標準庫中定義了順序容器,順序容器可以提供快速訪問的能力,當我們要在容器內查詢某個關鍵字時,例如我們要在句子中查詢某個單詞以及記錄單詞出現的次數時,使用順序容器就會十分繁瑣。
關聯容器支援通過關鍵字高效查詢和提取元素,在處理關鍵字的查詢和提取等操作時,具有比順序容器更加快速高效的優勢。
兩種主要的關聯容器:
map:關鍵字+值
set:關鍵字
根據是否重複關鍵字分為:
不重複關鍵字:multimap,multiset
允許重複關鍵字
根據是否有序分為:
順序儲存元素
無序儲存:unordered_map,unordered_set
各自的標頭檔案:map和multimap定義在map標頭檔案中;set和multiset定義在set標頭檔案中;unordered_map和unordered_set標頭檔案定義無序容器;
關聯容器額外的型別別名:
key_type:關鍵字型別
set容器為key_type
概述:map型別稱為關聯陣列,但其下標不必是整數,map容器中元素為pair型別物件,為first和second資料成員,first成員儲存關鍵字,second成員儲存對應的值。
定義map容器:
mapa; //定義a為關鍵字為t1型別,值為t2型別的map容器
map容器內的買乙個元素可以看作是pair型別,其中first成員儲存關鍵字,second成員儲存值,該型別定義在標頭檔案utilty中,定義pair型別:
paira;//建立乙個空的pair物件,它的兩個元素分別是t1和t2型別,採用值初始化
make_pair(v1,v2);//返回乙個用v1和v2初始化的pair。pair的型別從v1和v2的型別推斷出來
定義set容器:
seta; //a是t1型別的set容器
當解引用乙個關聯容器迭代器時,會得到乙個型別為容器的value_type的值的引用。
關聯容器不提供front、push_front、pop_front、back、push_back和pop_back操作。
一是insert成員實現:
c.insert(e) //e是乙個用在上的vaule_type型別的值。map容器使用的是pair型別,如果鍵e.first不在m中,則插入乙個鍵為e.first值為e.seconde的c元素。該函式返回乙個pair型別的物件,包含指向鍵為e.first的元素的map迭代器,以及乙個bool型別的物件,表示是否插入成功。
c.insert(beg,end) // beg和end是標記元素範圍的迭代器,其中的元素必須為c.value_type型別的鍵-值對。
c.insert(iter,e) //e是乙個用在vaule_type型別的值。如果鍵不在c中,則建立新元素,並以迭代器iter為起點搜尋新元素儲存的位置。返回乙個迭代器,指向c中具有給定鍵的元素。
二是下標操作:map和unordered_map提供了下標運算和at函式。
c[k];//返回關鍵字為k的元素;如果k不在c中,新增乙個關鍵字為k的元素,並對其進值初始化
c.at[k];//訪問關鍵字為k的元素,帶引數檢測;如果k不在c中,丟擲乙個out_of_range異常
note:因為下標運算可能插入乙個新元素,所以只可以對非const的map物件使用。在不確定某元素是非在容器中,並且不希望改變map時,不要使用下標運算來訪問元素,因為如果關鍵字不存在時,下標運算會插入該元素,在這種情況下,應該使用find。
關聯容器與順序容器一樣,可以通過給erase成員函式傳遞乙個迭代器或乙個迭代器對或者乙個元素範圍來刪除容器內元素
關聯容器額外的erase操作:
c.erase(k) //刪除c中鍵為k的元素。返回size_type型別的值,表示刪除的元素個數
c.erase(p) //從c中刪除迭代器p指向的元素。返回乙個指向p之後元素的迭代器
c.erase(b,e) //刪除迭代器對b和e所表示的範圍中的元素。返回e
find函式和count函式:
c.find(k)//返回乙個迭代器,指向第乙個關鍵字為k的元素;如果k不在容器內,則返回尾後迭代器,即c.end()
c.count(k)//返回關鍵字為k的元素的數量。對於不允許重複關鍵字的容器,返回值是0或1
note:在multimap和multiset重複關聯容器中查詢元素,如果有多個元素具有給定關鍵字,則這些元素在容器中會相鄰儲存。
c 關聯容器,雜湊學習筆記。
9.4 關聯容器 常用的兩個關聯容器set與map 關聯容器 associative container map中是 key value 鍵值對。set 每個元素只包含乙個關鍵字 2.map 關聯陣列,儲存鍵值對 例如 include include include include using na...
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...