[C++ 系列] 80. unordered系列关联式容器

1. unordered 系列关联式容器

C++98 中,STL 提供了底层为红黑树结构的一系列关联式容器,在查询时效率可达到 l o g N logN logN,即最差情况下需要比较红黑树的高度次,当树中的节点非常多时,查询效率也不理想。最好的查询是,进行很少的比较次数就能够将元素找到,因此在 C++11 中,STL 又提供了 4 个 unordered 系列的关联式容器,这四个容器与红黑树结构的关联式容器使用方式基本类似,只是其底层结构不同,本文中只对 unordered_mapunordered_set 进行介绍,unordered_multimapunordered_multiset 可查看文档介绍。

2. unordered_map

2.1 unordered_map 的文档介绍

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 实现了直接访问操作符<\font> (operator[]),它允许使用 key 作为参数直接访问 value
  6. 它的迭代器至少是前向迭代器
2.2 unordered_map 的接口说明
  1. unordered_map 的构造
函数声明
功能介绍
unordered_map构造不同格式的unordered_map对象
  1. unordered_map 的容量
函数声明
功能介绍
bool empty() const检测unordered_map是否为空
size_t size() const获取unordered_map的有效元素个数
  1. unordered_map 的迭代器
函数声明
功能介绍
begin返回unordered_map第一个元素的迭代器
end返回unordered_map最后一个元素下一个位置的迭代器
cbegin返回unordered_map第一个元素的const迭代器
cend返回unordered_map最后一个元素下一个位置的const迭代器
  1. unordered_map 的元素访问
函数声明
功能介绍
operator[]返回与key对应的value,没有一个默认值

注意:

  • 该函数中实际调用哈希桶的插入操作,用参数 keyV() 构造一个默认值往底层哈希桶中插入,如果 key 不在哈希桶中,插入成功,返回 V(),插入失败,说明 key 已经在哈希桶中,将 key 对应的 value 返回。

map、unordered_map 支持 [ ] 重载,这就使得它变得非常方便,而multimap、set 等不支持的容器就很不方便。

  1. unordered_map 的查询
函数声明
功能介绍
iterator find(const K& key)返回key在哈希桶中的位置
size_t count(const K& key)返回哈希桶中关键码为key的键值对的个数

注意:

  • unordered_mapkey 是不能重复的,因此 count 函数的返回值最大为 1
  1. unordered_map 的修改操作
函数声明
功能介绍
insert向容器中插入键值对
erase删除容器中的键值对
void clear()清空容器中有效元素个数
void swap(unordered_map&)交换两个容器中的元素
  1. unordered_map 的桶操作
函数声明
功能介绍
size_t bucket_count()const返回哈希桶中桶的总个数
size_t bucket_size(size_t n)const返回n号桶中有效元素的总个数
size_t bucket(const K& key)返回元素key所在的桶号

3. unordered_set

3.1 unordered_set 的文档介绍

unordered_set在线文档说明

3.2 unordered_set 的接口说明

参考官方文档即可,在此不再赘述过多:unordered_set在线文档说明

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ypuyu

如果帮助到你,可以请作者喝水~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值