hash_map map unordered_map適用情況及簡單對比

首先放觀點,歡迎指正!
如果數據量小,並且沒有順序要求,強烈建議使用 unordered_map
如果數據量大,但查詢次數不多,可以使用map
如果數據量大,查詢次數多,建議使用hash_map

map:紅黑樹 logn時間複雜度 有序
unordered_map內部是hash表,在C++11的時候被引入標準庫了,而hash_map沒有
hash_map原理:
使用一個下標範圍比較大的數組來存儲元素。可以設計一個函數(哈希函數,也叫散列函數),使得每個元素的關鍵字都與一個函數值(即數組下標,hash值)相對應,於是用這個數組單元來存儲這個元素;也可以簡單的理解爲,按照關鍵字爲每一個元素“分類”,然後將這個元素存儲在相應“類”所對應的地方,稱爲桶。
但是,這不能夠保證每個元素的關鍵字與函數值是一一對應的,因此極有可能出現對不不同的元素,卻計算出相同的函數值,這樣就產生了“衝突”。換句話說,就是把不同的元素分在了相同的“類”中。總的來說,“直接定址”和“解決衝突”是哈希表的兩大特點。
hash_map,首先分配一大片內存,形成許多桶。是利用hash函數,對key進行映射到不同區域進行保存。其插入過程:
1、得到key;
2、通過hash函數得到hash值;
3、得到桶號(一般都爲hash值對桶數求模);
4、存放key和value在桶內;
其取值過程是:
1、得到key;
2、通過hash函數得到hash值;
3、得到桶號;
4、比較桶的內部元素是否與key相等,若不相等,則沒有找到;
5、取出相等的記錄的value;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章