關聯式容器set和map原理
1、標準的STL關聯式容器分為set(集合)和map(對映表)兩大類,以及這兩大類衍生而來的multiset(多鍵集合)和multimap(多鍵對映表)。
2、這些容器的底層均以RB-tree(紅黑樹)完成。RB-tree(紅黑樹)也是一個獨立的容器,但並不開放給外界使用。
3、此外,SGI STL還提供了一個不在標準規格之列的關聯式容器:hash table(雜湊表),以及以此hash
table 為底層機制而完成的hash_set(雜湊集合)、hash_map(雜湊對映表)、hash_multiset(雜湊多鍵集合)、hash_multimap(雜湊多鍵對映表)。
4、二叉搜尋樹是一種特殊的二叉樹,其具有如下性質:
2)若右子樹不空,則右子樹所有節點的值均大於它的根節點的值
3)左右子樹也分別為二叉搜尋樹
5、二叉搜尋樹支援各種動態集合操作,包括:插入、查詢、刪除,其操作的時間複雜度與樹的高度成正比,在遇到二叉樹極端不平衡的情況下,其形狀就與連結串列是一樣的,二叉樹插入、查詢、刪除的時間複雜度都退化為O(n)。
6、 平衡二叉搜尋樹是一種特殊的二叉搜尋樹,其沒有一個節點深度過大,不同的平衡條件,造就不同的效率表現。常見的平衡二叉搜尋樹有:AVL-tree和RB-tree。
7、關聯容器一般以平衡二叉搜尋樹作為內部資料結構,RB-tree的應用尤其廣泛。
8、RB-tree是許多平衡二叉查詢樹的一種,一顆有n個內結點的紅黑樹的高度至多為2log(n+1),它能保證在最壞情況下,基本的動態集合操作時間為O(logn)。
9、二叉搜尋樹具有對數平均時間的表現,但這樣的表現構造在一個假設上:輸入資料有足夠的隨機性。
而hash table(雜湊表)的資料結構,這種結構在插入、刪除、搜尋等操作上也具有常數時間的表現,而且這種表現是以統計為基礎的,不需要依賴輸入元素的隨機性。
相關文章
- 使用 MAP CLASS 庫建立關聯容器
- set容器幾個關鍵函式函式
- 深入Java原始碼解析容器類List、Set、MapJava原始碼
- 【Java基礎】--Java容器剖析:Set、List、Map介面Java
- javascript中的Map和SetJavaScript
- map和set對vector排序排序
- Set和Map資料結構。資料結構
- C++進階(map+set容器模擬實現)C++
- JavaScript中的new map()和new set()使用詳細(new map()和new set()的區別)JavaScript
- Java容器(List、Set、Map)知識點快速複習手冊Java
- STL關聯式容器中刪除元素的方法和陷阱 四 (轉)
- Java List/Set/MapJava
- List、Set、Queue、Map
- map/ multimap容器
- 計算機程式的思維邏輯 (75) - 併發容器 - 基於SkipList的Map和Set計算機
- es6 的學習之 set 和 map
- 【重溫基礎】11.Map和Set物件物件
- 深入理解ES6--7.Set和Map
- java中list、set和map 的區別(轉)Java
- java Map Set遍歷Java
- List,Set,Queue,Map介面
- 兩種Java容器類List和Set分析Java
- ES6之Set和Map資料結構資料結構
- ES6學習筆記之Set和Map筆記
- List、Set、Map的區別
- set、List、map的區別
- 主外來鍵關聯刪除(on delete set null和on delete cascade)deleteNull
- 資料結構——關聯容器資料結構
- set\list\map部分原始碼解析原始碼
- java 基礎之 Set、Map、ListJava
- 如何用Map物件建立Set物件物件
- Java集合框架List,Map,Set等Java框架
- 深入 Go 的 Map 使用和實現原理Go
- 【深入淺出ES6】Set\Map
- Java學習--list,set,Map介面使用Java
- Java中的Set, List, Map漫談Java
- C++_STL—容器Map篇C++
- 【Django】關聯查詢set.all() 方法的使用Django