q:stl中set底層實現方式? 為什麼不用hash?
a: 第乙個問題:set底層實現方式為rb樹(即紅黑樹)。
第二個問題:
首先set,不像map那樣是key-value對,它的key與value是相同的。關於set有兩種說法,第乙個是stl中的set,用的是紅黑樹;第二個是hash_set,底層用得是hash table。紅黑樹與hash table最大的不同是,紅黑樹是有序結構,而hash table不是。但不是說set就不能用hash,如果只是判斷set中的元素是否存在,那麼hash顯然更合適,因為set 的訪問操作時間複雜度是log(n)的,而使用hash底層實現的hash_set是近似o(1)的。然而,set應該更加被強調理解為「集合」,而集合所涉及的操作並、交、差等,即stl提供的如交集set_intersection()、並集set_union()、差集set_difference()和對稱差集set_symmetric_difference(),都需要進行大量的比較工作,那麼使用底層是有序結構的紅黑樹就十分恰當了,這也是其相對hash結構的優勢所在。
C STL中set底層實現方式
q stl中set底層實現方式?為什麼不用hash?a 第乙個問題 set底層實現方式為rb樹 即紅黑樹 第二個問題 首先set,不像map那樣是key value對,它的key與value是相同的。關於set有兩種說法,第乙個是stl中的set,用的是紅黑樹 第二個是hash set,底層用得是h...
stl中set和hash set底層實現詳解
set和hash set是stl中比較重要的容器,有必要對其進行深入了解。在stl中,set是以紅黑樹 rb tree 作為底層資料結構的,hash set是以hash table 雜湊表 作為底層資料結構的。set可以在時間複雜度為o logn 情況下插入 刪除和查詢資料。hash set操作的時...
STL中map和set底層的紅黑樹實現
我們都知道map和set的實現是依賴紅黑樹的 怎樣寫紅黑樹可以讓map和set都可以使用呢?在這裡我們定義了乙個模版引數,如果它是key那麼它就是set,如果它是map,那麼它就是map 我們分析一下,紅黑樹迭代器的前置 到當前結點,就說明了它的左子樹和自己都已經訪問過了 1,當前位置,若右樹不為空...