• 17、STL中unordered_map(hash_map)和map的区别,hash_map如何解决 冲突以及扩容


    1) unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是 unordered_map 不会根据key的大小进行排序。

    2) 存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历。

    3) 所以使用时map的key需要定义operator<。而unordered_map需要定义hash_value函数并且重载 operator==。但是很多系统内置的数据类型都自带这些,

    4) 那么如果是自定义类型,那么就需要自己重载operator<或者hash_value()了。

    5) 如果需要内部元素自动排序,使用map,不需要排序使用unordered_map

    6) unordered_map的底层实现是hash_table;

    7) hash_map底层使用的是hash_table,而hash_table使用的开链法进行冲突避免,所有hash_map采用开链法进行冲突解决。

    8) 什么时候扩容:当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值---hash增长规律应该是每次成长到不小于当前桶大小两倍的最小素数

    9) 扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。

  • 相关阅读:
    PHP的命令行脚本调用
    JAVA使用jar命令制作可执行GUI程序
    PHP的代理模式
    PHP中的__clone()
    PHP使用反射动态加载第三方类
    NAT小记
    JAVA睡眠理发师代码记录
    PHP通过反射获得类源码
    PHP中单引号双引号的区别
    [转载]PHP导出数据库数据字典脚本
  • 原文地址:https://www.cnblogs.com/crbhf/p/15070521.html
Copyright © 2020-2023  润新知