c++ 標準模板庫中,set和map的底層實現通常基于紅黑樹,然們都是平衡二叉搜索樹(Balanceed Binary Serach Tree)的一種,這種結構保證了 插入,刪除,查找的時間復雜度為O(log n)比普通二叉搜索樹更高效。
set
set<T>是一個有序集合,不允許重復元素。
內部使用紅黑樹進行管理,每次插入時會自動排序。
set<T>是map<T,bool>的簡化版,因為它只存儲鍵,沒有值。
map
map<Key,Value>是鍵值對(Key-Value結構),類似python字典。
底層也是紅黑樹,鍵(Key)作為排序的依據,值(Value)存儲在節點上。
插入,查找時,樹自動平衡,保持O(logn)復雜度。
unordermap一般是指無序映射,元素的存儲順序與插入順序無關,由哈希函數決定。避免了map使用紅黑樹的O(log n)復雜度。唯一鍵。
unoedered_set 元素存儲順序由哈希函數決定,不能按照插入順序或者大小順序訪問。
唯一性,集合中不能重復。比紅黑樹set更快,查找,插入,刪除,平均O(1),不能直接修改集合中的元素值,但可以刪除后重新插入。