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

上一篇:三、哈希表(3):两个数组的交集


下一篇:leetcode 存在重复元素 简单