map和unordered_map性能對比

最近遇到一個查找對應關係的需求,第一時間想到map,但是千萬級的數據,於是使用了unordered_map。時間降低了3倍左右。
但是偶然看見網上有有人說手擼一個hashmap,最基本的鏈式的,都要比unordered_map要快,於是試了一下。

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

手擼hashmap STL-unordered_map
底層實現 vector<slit> Node**
擴展表 素數表 總元素大小除負載因子/兩倍桶大小/下一個素數
hash函數 (n ^ 0xdeadbeef) % curTableSize; FNV-1a
初始大小 53 10
擴展條件 數據量大於桶大小 數據量大於桶大小

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

測試情況:

一億的int數據

Ubuntu 14.04.5 LTS

gcc version 4.8.4

map unordered_map 手擼hash_map
插入時間(ms) 189264 55442 19055
查詢時間(ms) 98428 15796 2590
內存佔用(M) 4579 4201 4590

不知道爲啥會快,也不知道爲啥unordered_map內存佔用會低。。。

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

測試代碼放在git上。

https://github.com/xixihahag/hash

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