C++ unordered_map容器(STL unordered_map)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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         请求改变容器容量

猜你喜欢

转载自blog.csdn.net/qq_28584889/article/details/83833296