- ?所謂關聯式容器,觀念上類似關聯式數據庫(實際上則簡單許多):每筆數據(每個元素)都有一個鍵值(key)和一個實值(value) 2。當元素被插入到關聯式 容器中時,容器內部結構(可能是RB-tree,也可能是hash-table)便依照其鍵 值大小,以某種特定規則將這個元素放置于適當位置.
- 關聯式容器沒有所謂頭尾(只有最大元素和最小元素),所以不會有所謂push_back()、push_f ront ()、 pop_back()、pop_f ront () . begin。、end() 這樣的操作行為。
- 一般而言,關聯式容器的內部結構是一個balanced binary tree (平衡二叉樹),以便獲得良好的搜尋效率.balanced binary tree有許多種類型,包 括 AVL-tree.RB-tree、AA-tree,其中最被廣泛運用于S T L 的是RB-tree (紅黑樹)。為了探討 S T L 的關聯式容器,我必須先探討RB-tree.
- size 節點數量,包含自身
- height 葉子節點是0,逐個向上遞增
- depth 根節點是0,逐個向下遞增
- length 從根節點到 計算節點之間的邊的個數
二叉搜索數
?
?
?
?
?
?源碼這一塊 已經懵逼
?類似鏈表中的dummptynode,他的作用使得 對于頭結點的操作和其余的節點操作是一致的
- ?接下來,每當插入新節點時,不但要依照RB-tree的規則來調整,并且維護 header的正確性,使其父節點指向根節點,左子節點指向最小節點,右子節點指 向最大節點。節點的插入所帶來的影響,是下一小節的描述重點。
?
?
?左右子樹高度相差為2時,會進行平衡,賦值僅僅改變顏色即可
?