STL原始碼剖析 關聯式容器

2021-07-03 18:56:29 字數 751 閱讀 6941

一、set

所有元素都會根據元素的鍵值自動排序,set元素不像map那樣可以同時擁有key和value,set元素的鍵值就是實值,set不允許有兩個相同元素的鍵值。

二、map

所有元素都會根據元素的鍵值自動排序,map不允許有兩個元素有相同的鍵值。以紅黑樹作為底層機制,每乙個節點上的內容是乙個pair,pair的第乙個元素是鍵值,第二個元素為實值。

三、multiset

特性與set完全相同,唯一區別鍵值允許重複。那是因為它的插入操作是底層機制rb-tree的insert-equal()而非insert_unique().

四、hash_table

線性探測:迴圈一一尋找,如果到達尾端,就繞道頭部進行下去。

二次探測:h,h+1,h+4,h+9…….

開鏈探測:為**中的每乙個元素維護乙個list,然後在list身上執行元素的插入、搜尋、刪除等操作,負載係數將大於1。sgi stl

中的hash_table便是採用這種做法。sgi stl中採用質數來設計**的大小。傳入引數n時,找到大於或等於n最小的那個質數

五、hash_set

以hash_table為底層實現機制,由於rb-tree有自動排序功能而hash_table沒有,所以set元素有自動排序,而hash_set是沒有的。

六、hash_map

以hash_table為底層實現機制,由於rb-tree有自動排序功能而hash_table沒有,所以map元素有自動排序,而hash_map是沒有的。

STL原始碼剖析筆記 5關聯式容器

2 rb tree 3 set 4 map 5 multiset 6 multimap 7 hashtable 8511 hash sethash maphash multisethash multimap t operator const key types k 次集團 兩個元素經雜湊函式計算出來...

《STL原始碼剖析》 序列式容器

stl原始碼剖析 前言 所謂的序列式容器,其中的元素都可序,但未必有序,c 本身提供了乙個序列式容器array,stl 提供了vector,list,deque,srack,queue,priority queue等 一.使用reverse 函式提前設定容量大小 1.1 提前設定的原因 對於vect...

STL原始碼剖析之序列式容器

最近由於找工作需要,準備深入學習一下stl原始碼,我看的是侯捷所著的 stl原始碼剖析 之所以看這本書主要是由於我過去曾經接觸過一些台灣人,我一直覺得台灣人非常不錯 這裡不涉及任何政治,僅限個人感受 在技術上他們比較嚴謹,在為人處世上也非常謙虛,所以一些台灣的技術資料我覺得是值得一看的。想要學習st...