C++ STL中set底层实现方式
生活随笔
收集整理的這篇文章主要介紹了
C++ STL中set底层实现方式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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的實現》
總結
以上是生活随笔為你收集整理的C++ STL中set底层实现方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hive 思维导图
- 下一篇: c++实现解析文件路径