C++ STL中的map用紅黑樹實現,搜索效率是O(lgN),為什么不像python一樣用散列表從而獲得常數級搜索效率呢?


C++ STL中的標准規定:
 map, 有序
 unordered_map,無序,這個就是用散列表實現

 

談談hashmap和map的區別,我們知道hashmap是平均O(1),map是平均O(lnN)的,實踐上是不是hashmap一定優於map呢?這里面有幾個因素要考慮:
  1. hashmap的內存效率比map差,這是顯而易見的
  2. map的查找效率實踐上是非常高的,如在1M數據中查找一個元素,需要多少次比較呢?20次。
  3. map的查找效率比hashmap穩定。
  4. hashmap查找時候要算hash,這個最壞時間復雜度是O(M)(M是key字符串的長度),如果你的key非常非常非常非常非常非常……長,基於比較的map通常只使用頭幾個字符進行比較,而hashmap要O(M)地算出hash
  5. 內存布局會影響內存局部性,對性能會有影響




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM