zoukankan      html  css  js  c++  java
  • 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对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。

  • 相关阅读:
    集合类学习之ArrayList源码解析
    集合类学习之Hashmap机制研究
    基于 HTTP/2 的全新 APNs 协议
    tcp协议头窗口,滑动窗口,流控制,拥塞控制关系
    TCP、UDP、IP 协议分析
    /proc/net/tcp中各项参数说明
    linux系统limit知识
    随机行
    nf_conntrack被启用导致服务故障
    HTTP 2.0的那些事
  • 原文地址:https://www.cnblogs.com/crbhf/p/15070521.html
Copyright © 2011-2022 走看看