目录
1. unordered系列关联式容器
在
C++98
中,
STL
提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到
$log_2N$,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在C++11
中,
STL
又提供了
4
个unordered系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对unordered_map
和
unordered_set
进行介绍,unordered_multimap和
unordered_multiset
可查看文档介绍
1.1 unordered_map
1.1.1 unordered_map的文档介绍
1. unordered_map 是存储 <key, value> 键值对的关联式容器,其允许通过 keys 快速的索引到与其对应的value 。2. 在 unordered_map 中,键值通常用于惟一地标识元素,而映射值是一个对象,其内容与此键关联。键和映射值的类型可能不同。3. 在内部 ,unordered_map 没有对 <kye, value> 按照任何特定的顺序排序 , 为了能在常数范围内找到key 所对应的 value , unordered_map 将相同哈希值的键值对放在相同的桶中。4. unordered_map 容器通过 key 访问单个元素要比 map 快,但它通常在遍历元素子集的范围迭代方面效率较低。5. unordered_maps 实现了直接访问操作符 (operator[]) ,它允许使用 key 作为参数直接访问value 。6. 它的迭代器至少是前向迭代器。
1.1.2 unordered_map的接口说明
1.
unordered_map
的构造
函数声明 | 功能 |
unordered_map::unordered_map - C++ Reference |
构造不同格式的
unordered_map
对象
|
2.
unordered_map
的容量
函数声明 | 功能 |
bool empty() const
|
检测
unordered_map
是否为空
|
size_t size() const
|
获取
unordered_map
的有效元素个数
|
3.
unordered_map
的迭代器
函数声明 | 功能 |
unordered_map::begin - C++ Reference |
返回
unordered_map
第一个元素的迭代器
|
unordered_map::end - C++ Reference |
返回
unordered_map
最后一个元素下一个位置的迭代器
|
unordered_map::cbegin - C++ Reference |
返回
unordered_map
第一个元素的
const
迭代器
|
unordered_map::cend - C++ Reference |
返回
unordered_map
最后一个元素下一个位置的
const
迭代器
|
4.
unordered_map
的元素访问
函数声明 | 功能 |
https://cplusplus.com/reference/unordered_map/unordered_map/operator[]/ |
返回与
key
对应的
value
,没有一个默认值
|
注意:该函数中实际调用哈希桶的插入操作,用参数 key 与 V() 构造一个默认值往底层哈希桶中插入,如果 key 不在哈希桶中,插入成功,返回 V() ,插入失败,说明 key 已经在哈希桶中,将 key 对应的 value 返回。
5.
unordered_map
的查询
函数声明 | 功能 |
unordered_map::find - C++ Reference |
返回
key
在哈希桶中的位置
|
unordered_map::count - C++ Reference |
返回哈希桶中关键码为
key
的键值对的个数
|
注意: unordered_map 中 key 是不能重复的,因此 count 函数的返回值最大为 1
6.
unordered_map
的修改操作
函数声明 | 功能 |
unordered_map::insert - C++ Reference |
向容器中插入键值对
|
unordered_map::erase - C++ Reference |
删除容器中的键值对
|
unordered_map::clear - C++ Reference |
清空容器中有效元素个数
|
unordered_map::swap - C++ Reference |
交换两个容器中的元素
|
7.
unordered_map
的桶操作
函数声明 | 功能 |
unordered_map::bucket_count - C++ Reference |
返回哈希桶中桶的总个数
|
unordered_map::bucket_size - C++ Reference |
返回
n
号桶中有效元素的总个数
|
unordered_map::bucket - C++ Reference |
返回元素
key
所在的桶号
|
1.2 unordered_set
参见