在資料量為幾百項時,紅黑樹map的優勢較大,但資料量偏大時,雜湊map檢索速度較快
紅黑樹map基於紅黑樹實現,每次檢索從頭開始檢索
雜湊map基於雜湊雜湊,大量資料檢索優勢大
c++11新特性:unordered_map和map的區別:
unordered_map和map類似,都是儲存的key-value的值,可以通過key快速索引到value。不同的是unordered_map不會根據key的大小進行排序,
儲存時是根據key的hash值判斷元素是否相同,即unordered_map內部元素是無序的,而map中的元素是按照二叉搜尋樹儲存,進行中序遍歷會得到有序遍歷。
所以使用時map的key需要定義operator<。而unordered_map需要定義hash_value函式並且過載operator==。但是很多系統內建的資料型別都自帶這些,
那麼如果是自定義型別,那麼就需要自己過載operator《或者hash_value()了。
結論:如果需要內部元素自動排序,使用map,不需要排序使用unordered_map
unordered_map的使用案列:
#include#include#includeusing namespace std;
struct person
bool operator== (const person& p) const
};
size_t hash_value(const person& p)
int main()
return 0;
}
雜湊表和紅黑樹
hash,也可以稱為 雜湊 就是把任意長度的輸入,通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出 也就是多對一的關係 在所有的線性資料結構中,陣列的定位速度最快,因為它可通過陣列下標直接定位到相應的...
STL中map和set底層的紅黑樹實現
我們都知道map和set的實現是依賴紅黑樹的 怎樣寫紅黑樹可以讓map和set都可以使用呢?在這裡我們定義了乙個模版引數,如果它是key那麼它就是set,如果它是map,那麼它就是map 我們分析一下,紅黑樹迭代器的前置 到當前結點,就說明了它的左子樹和自己都已經訪問過了 1,當前位置,若右樹不為空...
STL中map和set底層的紅黑樹實現
我們都知道map和set的實現是依賴紅黑樹的 怎樣寫紅黑樹可以讓map和set都可以使用呢?在這裡我們定義了乙個模版引數,如果它是key那麼它就是set,如果它是map,那麼它就是map 我們分析一下,紅黑樹迭代器的前置 到當前結點,就說明了它的左子樹和自己都已經訪問過了 1,當前位置,若右樹不為空...