C++ STL中的map用红黑树实现,搜索效率是O(lgN),为什么不像python一样用散列表从而获得常数级搜索效率呢?
2016-04-27 10:47
337 查看
C++ STL中的标准规定:
map, 有序
unordered_map,无序,这个就是用散列表实现
谈谈hashmap和map的区别,我们知道hashmap是平均O(1),map是平均O(lnN)的,实践上是不是hashmap一定优于map呢?这里面有几个因素要考虑:
- hashmap的内存效率比map差,这是显而易见的
- map的查找效率实践上是非常高的,如在1M数据中查找一个元素,需要多少次比较呢?20次。
- map的查找效率比hashmap稳定。
- hashmap查找时候要算hash,这个最坏时间复杂度是O(M)(M是key字符串的长度),如果你的key非常非常非常非常非常非常……长,基于比较的map通常只使用头几个字符进行比较,而hashmap要O(M)地算出hash
- 内存布局会影响内存局部性,对性能会有影响
相关文章推荐
- C语言算法---求鞍点
- C语言算法---求鞍点
- C++基础之动态分配内存
- c++: stringstream的使用
- 如何判断一个txt文件的编码格式
- c++使用rapidxml
- C++中多重继承的二义性及解决办法
- C/C++字符串
- ELF格式详解
- 文章标题
- Visual Studio对 C++11标准支持情况
- C++ char*,const char*,string的相互转换
- c++ primer 学习笔记24 复制构造函数
- C++调用jar包
- c语言求斐波那契数列前20项奇数的和
- 二叉树创建-- .cpp函数文件(无模板)
- C++作业4
- C语言实现栈(数组)
- c++第4次作业
- C++ enum实例