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. 內存佈局會影響內存局部性,對性能會有影響
相關文章
相關標籤/搜索