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. 内存布局会影响内存局部性,对性能会有影响
相关文章
相关标签/搜索