map和unordered map效能對比

2021-10-01 16:23:05 字數 854 閱讀 4948

最近遇到乙個查詢對應關係的需求,第一時間想到map,但是千萬級的資料,於是使用了unordered_map。時間降低了3倍左右。

但是偶然看見網上有有人說手擼乙個hashmap,最基本的鏈式的,都要比unordered_map要快,於是試了一下。

發現stl寫的還挺有意思的。寫說下和stl的對比。

手擼hashmap

stl-unordered_map

底層實現

vector

node**

擴充套件表素數表

總元素大小除負載因子/兩倍桶大小/下乙個素數

hash函式

(n ^ 0xdeadbeef) % curtablesize;

fnv-1a

初始大小

5310

擴充套件條件

資料量大於桶大小

資料量大於桶大小

其實實現都差不多,但是測試出來的資料卻很有意思。

測試情況:

一億的int資料

ubuntu 14.04.5 lts

gcc version 4.8.4

mapunordered_map

手擼hash_map

插入時間(ms)

189264

55442

19055

查詢時間(ms)

98428

15796

2590

記憶體占用(m)

4579

4201

4590

不知道為啥會快,也不知道為啥unordered_map記憶體占用會低。。。

看了原始碼,感覺實現的差不多啊,盲猜可能缺少了邊界檢查和類似的保障機制吧。

測試**放在git上。

指標和Map 指標和Map

指標和map 怎麼樣,看下來有點眼花繚亂吧,究竟這個pmap裡面存放的是什麼呢?為了搞清楚這個問題,我們還是要從指標入手。搞清楚什麼是指標,指標裡存放的是什麼內容指標是指向一塊記憶體中的儲存區域,指標中存放的是段記憶體的開始位址,是乙個整形資料,占用4個位元組,搞清楚這點後,對pmap或許應該有乙個...

雜湊map和紅黑樹map比較

在資料量為幾百項時,紅黑樹map的優勢較大,但資料量偏大時,雜湊map檢索速度較快 紅黑樹map基於紅黑樹實現,每次檢索從頭開始檢索 雜湊map基於雜湊雜湊,大量資料檢索優勢大c 11新特性 unordered map和map的區別 unordered map和map類似,都是儲存的key valu...

匿名函式和map

執行結果 2,3,6,10,9 0,1,4,8,7 1,4,25,81,64 process finished with exit code 0 1 num 1,2,5,8,15 2 def map test func,x 3 array 4 for i in x 5 res func i 7 re...