版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28584889/article/details/83833296
unordered_map(无序映射)
C++11标准中加入了unordered系列容器。unordered_map的底层是用哈希表(又名散列)实现。哈希表利用哈希函数,将关键字的哈希值都放在一个桶(bucket)里面,具有相同哈希值的放到同一个桶。unordered_map内部元素的存储是无序的,相当于java中的HashMap。
本文简要总结unordered_map的基本用法,unordered_map很多成员函数的用法类似于map,这里不再赘述。基本用法可参考这里->map的详细总结。
unordered_map与map的区别在于:因为底层是由哈希表实现,所以查找速度非常快,查找时间以O(1)计。但是缺点是哈希表的建立比较耗费时间。所以当查找比较频繁的时候可以考虑unordered_map。
[unordered_map模板]
template < class Key, // unordered_map::key_type
class T, // unordered_map::mapped_type
class Hash = hash<Key>, // unordered_map::hasher
class Pred = equal_to<Key>, // unordered_map::key_equal
class Alloc = allocator< pair<const Key,T> > // unordered_map::allocator_type
> class unordered_map;
[包含的头文件]
#include<unordered_map>
[迭代器]
unordered_map的迭代器是一个指针,指向容器中的元素,通过迭代器可以访问元素。
unordered_map<Key,T>::iterator it;
(*it).first; // the key value (of type Key)
(*it).second; // the mapped value (of type T)
(*it); // the "element value" (of type pair<const Key,T>)
unordered_map中元素的键值分别是迭代器的first和second的属性。上面是用迭代器的解引用的方式访问,也可以用指针访问运算符直接访问元素的键值。
it->first; // same as (*it).first (the key value)
it->second; // same as (*it).second (the mapped value)
[成员函数]
===============================迭代器==========================================
begin 返回指向容器起始位置的迭代器(iterator)
end 返回指向容器末尾的迭代器
cbegin 返回指向容器起始位置的常迭代器(const_iterator)
cend 返回指向容器末尾位置的常迭代器
===============================Capacity========================================
size 返回有效元素的个数
max_size 返回unordered_map支持的最大元素个数
empty 判断是否为空
===============================访问元素=========================================
operator[] 访问元素(不进行下标越界检查)
at 访问元素(进行下标越界检查,增加了性能开销)
===============================修改元素=========================================
insert 插入元素
erase 删除元素
swap 交换内容
clear 清空内容
emplace 构造及插入一个元素
emplace_hint 按照提示构造及插入一个元素
================================操作============================================
find 通过给定主键查找元素,没找到:返回unordered_map::end
count 返回匹配给定主键的元素的个数
equal_range 返回值匹配给定搜索值的元素组成的范围
==============================Buckets===========================================
bucket_count 返回槽(Bucket)数
max_bucket_count 返回最大槽数
bucket_size 返回槽大小
bucket 返回元素所在槽的序号
load_factor 返回载入因子,即一个元素槽(Bucket)的最大元素数
max_load_factor 返回或设置最大载入因子
rehash 设置槽数
reserve 请求改变容器容量