1.關聯式容器的概念
關聯式容器的概念類似於關聯式資料庫,為獲得良好的搜尋效率,一般用平衡二叉樹作為底層實現,而紅黑樹是一種應用廣泛的平衡興致很好的bst。元素被插入關聯容器中時,根據特定規則,比如,map根據鍵大小,set根據元素本身大小在樹中擺放(這就是關聯的含義)。也正是這個原因,關聯容器沒有頭尾之說,因此涉及頭尾的操作如pop,push之類的函式都沒有
2.準備知識—rb-tree
將rb-tree泛化實現在stl框架之中是整個關聯容器涉及的重中之重。下面分析rb-tree的實現3.set
set迭代器
set操作,見api好了
4.map
map迭代器
map操作,見api文件
5.multiset/multimap
允許元素重複,實現的代價是底層的紅黑樹實現變得更複雜。6.hashtable
7.hash_map
hash_map和普通map的區別是底層實現不同,因此區別由此而生,比如,hash_map的迭代器是單向的,普通map是雙向的,hash_map搜尋的複雜度是常數時間,map的複雜度是o(lgn),同樣,由於底層不是紅黑樹,hash_map裡面的元素不會自動有序。8.hash_set
hash_set的介面與set介面也基本相同,但是同樣的,hash_set裡面的元素不會自動有序。總結:理解了rb-tree和hash_table,就掌握了關聯容器的精髓!
STL原始碼剖析讀書筆記
一.stl提供六大元件,彼此可以組合套用。1.容器 containers 各種儲存結構,如vector list deque set map,用來存放資料。2.演算法 algorithme 各種常用演算法,如sort search copy erase等。3.迭代器 iterators 扮演容器與演...
《STL原始碼剖析》讀書筆記 三
hashtable 非標準 二叉搜尋樹 任何節點最多只能允許兩個子節點 平衡二叉樹 確保整棵樹的深度為o logn 左右子樹的高度最多差1 setmap multiset 特性與用法與set完全相同,唯一的差別在於它允許鍵值重複,插入的時候用的是rb tree的insert equal 而不是ins...
《STL原始碼剖析》讀書筆記 四
在stl中,所有的元素都是存放在容器中,容器需要配置空間來儲存這些數值,因此需要用到空間配置器。記憶體池 chunk alloc的工作 從記憶體池中取空間給free list使用。if 記憶體池水量足夠 直接調出20個區塊給free list else if 記憶體池水量還足夠提供至少1個區塊 調出...