關聯容器
(associative container):它們能通過
關鍵字(search key)直接訪問(儲存和讀取元素)。包括四類:
集合(set),
多重集合
(multiset),
對映(map)和
多重對映
(multimap)。◆
1、集合和多重集合類
:提供了控制數值集合的操作,其中數值是關鍵字,即不必另有一組值與每個關鍵字相關聯。
集合與多重集合類的主要差別在於多重集合允許重複的關鍵字,而集合不允許重複的關鍵字。
元素的順序由比較器
函式物件
(comparator function object)確定。例如對整型集合multiset,只要用比較器
函式物件
less排序關鍵字,元素即可按公升序排列。
◆ 2、集合(set)類模板宣告為:
template,
typename a = allocator>class set;
//模板參數列中的非型別引數同樣可有預設值
◆ 3、集合(set)類容器的建構函式:
set (); //構造乙個空的按預設次序排列的集合
set (pr); //構造乙個空的按函式物件pr排序的集合
set (first,last);
//構造乙個預設次序排列的集合,元素值由區間[first,last)指定的序列複製
set (first,last,pr); //同上,但按函式物件pr排序
這些建構函式還可以顯式給出分配子(allocator)物件。
◆ 4、集合和多重集合類支援雙向迭代子。
◆ 5、多重集合(multiset)和集合(set)通常實現為紅黑二叉排序樹。
紅黑二叉排序樹是實現平衡二叉排序樹的方法之一。
【例11.7】整型多重集合關聯容器類。(
檢視原始碼
)◆ 1、對映和多重對映類
對映和多重對映的主要差別在於多重對映允許存放與對映值相關聯的重複關鍵字,而對映只允許存放與對映值一一對應的單一關鍵字。
多重對映和對映關聯容器類用於快速儲存和讀取關鍵字與相關值(關鍵字/數值對,key/value pair)。
如果儲存學生的簡明資料,要求按學號排序,使用對映關聯容器(因為不會重號)是最合適的。如用姓名排序,因姓名可能重複,使用多重對映更為合適。使用時要用標頭檔案。
◆ 2、對映(map)類模板宣告
:template,
typename a = allocator> > class map;
◆ 3、 map容器有多種建構函式
:map (); //構造乙個空的按預設次序排列的對映
map (pr); //構造乙個空的按函式物件pr排序的對映
map (first,last);
//構造按預設次序排列的對映,元素值由區間[first,last)指定的有序序列複製
map (first,last,pr); //同上,但按函式物件pr排序
這些建構函式還可以顯式給出分配子(allocator)物件。
◆ 4、對映(map)類的使用
:對映和多重對映類支援雙向迭代子。
對映定義了成員操作符:
t& operator[const key& key]
這樣對映的使用是非常方便的,就如同乙個陣列,關鍵字作為下標,相關值作為元素值。
【例11.8】我國部分省份與面積對映關聯容器類的演示。 (
檢視原始碼
)
容器 順序容器 關聯容器
容器分為 順序容器 關聯容器,示意圖如下 順序容器 只儲存值,關聯容器 key value形式,關聯容器的乙個元素包含兩個部分 鍵值對 key value 有序容器 底層實現為紅黑樹,即容器內的key是有序的 無序容器 底層實現為hash table,雜湊表 區別 順序容器通過元素在容器中的位置順序...
STL 關聯容器
1 關聯容器與順序容器的本質區別 關聯容器通過鍵 key 儲存和讀取元素,而順序容器則通過元素在容器中的位置順序儲存和訪問元素。2 關聯容器的型別 map set multimap multiset 3 pair型別 pair型別的比較 p1 p1 p2 如果兩個pair物件的first和secon...
c 關聯容器
1.map建構函式 mapm 普通初始化 mapm m2 複製初始化法 mapm b,e 另乙個map物件的迭代器初始化法 注意 1 鍵值型別必須定義 操作符號,資料訪問時需要呼叫。2 m aaa 下表訪問方式導致的結果是,若鍵對應的值不存在,則插入該鍵值對應的預設值。2.map插入操作 m.ins...