讀書筆記 關聯式容器

2022-03-23 09:47:02 字數 1333 閱讀 7899

關聯式容器每個元素都有乙個鍵值和乙個實值(set鍵值就是實值),關聯式容器沒有所謂頭尾。一般而言,關聯式容器的內部結構是乙個平衡二叉樹。

二叉搜尋樹:任何節點的鍵值一定大於其左子樹中的每乙個節點的鍵值,並小於其右子樹中的每個節點的鍵值。

rb-tree(紅黑樹)規則:

1、  每個節點不是紅色就是黑色。

2、  根節點為黑色。

3、  如果節點為紅,其子節點必須為黑。

4、  任一節點至null的任何路徑,所含之黑節點數必須相同。

set,所有元素都會根據元素的鍵值自動被排序。set元素的鍵值就是實值。set不允許兩個元素有相同的鍵值。

不能通過迭代器修改set的元素值,因為set的元素值就是其鍵值,關係到set元素的排列規則。如果任意改變set的元素值,會破壞set組織。

當客戶端對set進行元素新增操作或刪除操作時,操作之前的迭代器在操作之後依然有效。

map,所有元素都會根據元素的鍵值自動被排序。map的所有元素都是pair,同時擁有實值和鍵值。不允許兩個元素擁有相同的鍵值。

不能通過迭代器修改map的鍵值,但可以修改其實值。

當客戶端對map進行元素新增操作或刪除操作時,操作之前的迭代器在操作之後依然有效。

map的insert操作返回乙個pair,由乙個迭代器和乙個bool值組成,後者表示插入是否成功,如果成功,前者即指向被插入的那個元素。

下標操作即可以作為左值也能被作為右值。其實現是呼叫insert,並返回插入後的實值的引用。

1 t& operator (const key_type&k)25

6 (*((insert(value_type(key, t()))).first)).second //

這個實值以引用方式返回,所以作為左值和右值都可以。

multiset,特徵與用法與set一致,唯一的區別在於允許鍵值重複。

multimap,特徵與用法與map一致,唯一的區別在於允許鍵值重複。

hashtable可視為一種字典結構。這種結構提供常數時間之基本操作。

元素對映時發生碰撞可以通過線性探測、二次探測、開鏈等做法解決。

hash_set以hashtable為底層的set。

hash_map以hashtable為底層的map。

hash_multiset以hashtable為底層的multiset。

C primer讀書筆記 第11章 關聯容器

1 關聯容器支援高效的關鍵字查詢和訪問 2 map 鍵值對 set僅關鍵字 3 8個關聯容器的3個維度 set map 關鍵字重複否 multi 有序否 unordered 4 set的成員函式find,如果查詢不到元素,返回尾後迭代器 5關聯容器的迭代器都是雙向的 vectorivec for v...

STL原始碼分析讀書筆記 第5章 關聯式容器

1.關聯式容器的概念 關聯式容器的概念類似於關聯式資料庫,為獲得良好的搜尋效率,一般用平衡二叉樹作為底層實現,而紅黑樹是一種應用廣泛的平衡興致很好的bst。元素被插入關聯容器中時,根據特定規則,比如,map根據鍵大小,set根據元素本身大小在樹中擺放 這就是關聯的含義 也正是這個原因,關聯容器沒有頭...

關聯式容器

關聯式容器是用來儲存資料的,與序列式容器不同的是,其儲存的是結構的鍵值對,在資料檢索時比序列式容器效率更高。鍵值對 用來表示具有一一對應關係的結構,該結構中一般只含兩個成員變數key和value,key代表鍵值,value表示與key對應的資訊。比如 現在要建立乙個英漢互譯的字典,那該字典中必然有英...