stl的關聯容器有set, map, multiset, multimap.用於實現它們的底層容器有劃入標準的rb_tree和待增加標準的hashtable.
底層容器rb_tree為上層容器提供了一種有序的服務.關鍵步驟時間複雜度為o(lgn);
底層容器hashtable為上層容器提供的是無序的服務,但其關鍵步驟的時間複雜度為o(1).那麼上層容器是怎麼對映究竟層容器中去的呢?以下以set和map為例,說明它們是怎樣對映到rb_tree和hashtable的.
對於rb_tree的節點,事實上僅僅是儲存了value物件,並沒有直接儲存key.
也就是說rb_tree僅僅能直接看到value,而看不到key.因此要為rb_tree提供乙個間接獲取key的方法.
即keyofvalue, 它負責從value獲取相應的key, 用於rb_tree中須要用到key值(比較)的地方.
與rb_tre一樣, hashtable也是如此.它通過extractkey來提取value相應的key.
鍵值就是實值,即key = value
1) set模板頭
2) 到rb_tree的對映
key_type 與 value_type都是set的 key.
1) set模板
2) 到hashtable的對映
通常鍵值與實值不等,即 key != value,為使用者提供了一種key到value對映服務.
在hashtable中看到的僅僅是pai.
value--(keyofvalue)-->key---(campare)->插入或刪除
value--(extractkey)--> key --(hashfcn)--> hashcode--(%n)--> bkt_num-->插入或刪除.
STL之關聯容器
1.set單重集合 不允許key重複 set作為乙個容器,也是用來儲存同一資料型別的資料型別,並且能從乙個資料集合中取出資料 c stl中標準關聯容器set,multiset,map,multimap內部採用的就是一種非常高效的平衡檢索二叉樹 紅黑樹 include using namespace ...
STL之關聯容器
關聯容器包含map set multimap multiset。關聯容器的特點是明顯的,相對於順序容器,有如下特點 1 其內部是採用非線性的二叉樹結構,具體的說是紅黑樹的結構原理實現的。2 set和map保證了元素的唯一性,multiset和multimap擴充套件了這一屬性,可以允許元素不唯一。3...
STL中的關聯式容器 map(對映)
map,即 對映 map是關聯容器的一種,具體實現採用了紅黑樹的平衡二叉樹的資料結構。它提供一對一 其中第乙個稱為關鍵字key,每個關鍵字只能在map 現一次,第二個稱為該關鍵字的值value 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提供快速通道。由於是利用...