STL---哈希map:unordered_map
来源:互联网 发布:小电影网站 知乎 编辑:程序博客网 时间:2024/05/21 20:00
一、unordered_map
哈希map是一种关联容器,通过键值和映射值存储元素。允许根据键值快速检索各个元素。
在unordered_map中,键值一般用来唯一标识元素,而对应的值是一个对象关联到这个键的内容。键映射值的类型可能会有所不同。
在内部unordered_map的元素不以键值或映射的元素作任何特定的顺序排序,其存储位置取决于哈希值,允许直接通过其键值为快速访问单个元素(具有恒定平均的平均时间复杂度)。
unordered_map容器比map容器更快地通过键值访问他们的单个元素,虽然unordered_map一般都是比map通过其元素的一个子集范围迭代效率低。
哈希map允许使用操作运算符(运算符[])以其键值作为参数直接访问元素。
二、unordered_map与map的区别
boost::unordered_map, 它与 stl::map的区别就是,stl::map是按照operator<比较判断元素是否相同,以及比较元素的大小,然后选择合适的位置插入到树中。所以,如果对map进行遍历(中序遍历)的话,输出的结果是有序的。顺序就是按照operator< 定义的大小排序。
而boost::unordered_map是计算元素的Hash值,根据Hash值判断元素是否相同。所以,对unordered_map进行遍历,结果是无序的。
用法的区别就是,stl::map 的key需要定义operator< 。 而boost::unordered_map需要定义hash_value函数并且重载operator==。对于内置类型,如string,这些都不用操心。对于自定义的类型做key,就需要自己重载operator== 或者hash_value()了。
当不需要结果排好序时,最好用unordered_map。
stl::map对于与java中的TreeMap,而boost::unordered_map对应于java中的HashMap。
三、map hash_map和unordered_map效率比较
运行效率方面:unordered_map最高,hash_map其次,而map效率最低
占用内存方面:hash_map内存占用最低,unordered_map其次,而map占用最高
参考:
http://blog.csdn.net/devourheavens/article/details/7539815
http://blog.csdn.net/liuhongxiangm/article/details/17395831
- STL---哈希map:unordered_map
- STL map与Boost unordered_map
- STL::unordered_map之无序map
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- STL::map mutil_map unordered_map 小结
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- STL map与Boost unordered_map
- boost::unordered_map与stl::map
- STL中的map、unordered_map、hash_map
- STL map与Boost unordered_map
- wordpress 4.4 禁用REST API/移除wp-json链接的两种方法
- vs快捷键相关
- 哈理工hrbust OJ 2225 解题报告 【递推】
- 小满优品是一家总部设在大连高新区的文创电商企业
- getopt_long函数用法
- STL---哈希map:unordered_map
- 策略(Strategy)模式
- 塞尔将向阿里巴巴集团总裁迈克尔埃文斯汇报工作
- open-falcon alarm 模块报警信息处理
- 美团2015笔试题以及最优解(四)
- Base64的Java代码实现
- Vagrant+virtualBox搭建集成开发环境
- 值得说的一个问题:C语言实现拓扑排序
- 技术笔记_如何在vs2015中配置使用sqlite3 x64 for .Net4x