hash_map map unordered_map适用情况及简单对比

首先放观点,欢迎指正!
如果数据量小,并且没有顺序要求,强烈建议使用 unordered_map
如果数据量大,但查询次数不多,可以使用map
如果数据量大,查询次数多,建议使用hash_map

map:红黑树 logn时间复杂度 有序
unordered_map内部是hash表,在C++11的时候被引入标准库了,而hash_map没有
hash_map原理:
使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫散列函数),使得每个元素的关键字都与一个函数值(即数组下标,hash值)相对应,于是用这个数组单元来存储这个元素;也可以简单的理解为,按照关键字为每一个元素“分类”,然后将这个元素存储在相应“类”所对应的地方,称为桶。
但是,这不能够保证每个元素的关键字与函数值是一一对应的,因此极有可能出现对不不同的元素,却计算出相同的函数值,这样就产生了“冲突”。换句话说,就是把不同的元素分在了相同的“类”中。总的来说,“直接定址”和“解决冲突”是哈希表的两大特点。
hash_map,首先分配一大片内存,形成许多桶。是利用hash函数,对key进行映射到不同区域进行保存。其插入过程:
1、得到key;
2、通过hash函数得到hash值;
3、得到桶号(一般都为hash值对桶数求模);
4、存放key和value在桶内;
其取值过程是:
1、得到key;
2、通过hash函数得到hash值;
3、得到桶号;
4、比较桶的内部元素是否与key相等,若不相等,则没有找到;
5、取出相等的记录的value;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章