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結構的優勢所在。
參考文獻:
《stl map 和 set的實現》
set底層實現方式?
q stl中set底層實現方式?為什麼不用hash?a 第乙個問題 set底層實現方式為rb樹 即紅黑樹 第二個問題 首先set,不像map那樣是key value對,它的key與value是相同的。關於set有兩種說法,第乙個是stl中的set,用的是紅黑樹 第二個是hash set,底層用得是h...
C STL中的容器 Set
set跟vector差不多,它跟vector的唯一區別就是,set裡面的元素是有序的且唯一的,只要你往set裡新增元素,它就會自動排序,而且,如果你新增的元素set裡面本來就存在,那麼這次新增操作就不執行。要想用set先加個頭檔案set。其中數值型按照從小到大排列 字元型按照字典序排列 includ...
stl中set和hash set底層實現詳解
set和hash set是stl中比較重要的容器,有必要對其進行深入了解。在stl中,set是以紅黑樹 rb tree 作為底層資料結構的,hash set是以hash table 雜湊表 作為底層資料結構的。set可以在時間複雜度為o logn 情況下插入 刪除和查詢資料。hash set操作的時...