22 rb tree set map深度探索

2021-08-13 04:02:24 字數 1997 閱讀 4950

stl容器set\multiset、map和multimap是屬於關聯型別(associated type)。其底層結構是紅黑樹rb_tree。本篇先介紹紅黑樹的結構和使用規則,然後以set和map的特性講述如何使用rb_tree作為底層結構。

1)g2.9中rb_tree的結構

解析:a、rb_tree的模板類引數有5個,分別是元素的key、元素的值value(由key|data組成)、從值中取出key、元素比較以及分配器。

b、rb_tree中包含三個資料:紅黑樹節點大小node_count、首節點的指標header、已經key比較規則key_compare。

2)rb_tree的示例

宣告乙個rb_tree:

說明:此時key為int;value為int(即key和data相同,適合set或multiset);並通過identity仿函式取key;使用stl演算法less比大小,如下:

說明:identity通過構造仿函式返回key的值。

說明:less類是stl中定義的比較演算法。

3)測試用例

解析:a、通過上述方法什麼rb_tree,初始時rb_tree為空,size()大小為0;

b、先通過insert_unique()函式插入不重複元素,若重複插入,則無效;

c、再通過insert_equal()函式出入重複的值,在rb_tree中有效,且相同元素會放在一起。

1)set的結構

解析:a、set的模板類引數有三個:第乙個是key(data也是key),第二個是預設比較方法less,第三個是分配器;

b、set中有乙個資料t,型別就是底層的紅黑樹rb_tree;

c、此時rb_tree中的keyofvalue就是identity;

d、在實際使用過程如黃色框過程一樣,宣告乙個int型別的set,就相當於使用了預設的key、比較方法less和identity取key法。

e、對set設定相關函式,就是間接使用rb_tree的相關函式。

f、迭代器是const型別,因此不能修改迭代器,也就是不能對元素賦值。

1)map的結構

解析:a、map模板類引數有4個,比set多了第二個引數,它是key和data的結合;

b、map中有乙個資料t,它就是紅黑樹rb_tree型別;

c、此rb_tree預設的第三個模板引數是selectlst表示得到傳入key和data中的key;

d、宣告乙個map型別的map,就如上黃色狂徒過程所示。其中紅海樹中的value引數用標準庫中的pair表示。

e、注意pair模板引數中是cont int,表示map中的key值是不可以改變的。

f、最後注意一點,map是可以用[ ]來來進行元素插入,而multiset則不可以。

2 2 深度學習環境配置分部詳解

os linux ubuntu 14.04 安裝 pip python 2.7.9或以上自帶pip sudo apt get install pyton pip 嘗試安裝scikit neuralnetwork 需要 numpy scipy theano sudo pip install sciki...

動手學深度學習 2 2 autograd

import torch x torch.ones 2,2,requires grad true 將其屬性.requires grad設定為true,它將開始追蹤 track 在其上的所有操作。完成計算後,可以呼叫.backward 來完成所有梯度計算 print x print x.grad fn...

《演算法導論》筆記 第22章 22 3 深度優先搜尋

深度優先搜尋的先輩子圖形成了乙個由數棵深度優先樹組成的深度優先森林。時間戳每個頂點v有兩個時間戳 當頂點v第一次被發現時,記錄下第乙個時間戳d v 當結束檢查v的鄰接表時,記錄下第二個時間戳f v dfs的執行時間為 v e 深度優先搜尋的性質 括號結構 把發現頂點u用左括號表示,完成用右括號表示,...