您的位置:首页 > 其它

STL---哈希map:unordered_map

2015-12-22 10:44 281 查看
一、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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  哈希