C++primer -关联容器-无序容器

无序容器有4个:unordered_map、unordered_set、unordered_multimap、unordered_multiset

无序容器是 元素不按排序方式存储 的容器,无序容器使用哈希存储方式组织元素:按照对关键字使用哈希函数得到的值分配元素的地址。

在维护元素的序代价非常高时,应使用无序容器。

无序容器可以使用关联容器的一切操作,如:使用迭代器遍历元素,但得到的结果与有序元素不一样。

无序容器在存储上组织为一组桶,每个桶保存零个或多个元素。无序容器通过哈希函数得到一个哈希值,依据哈希值将元素映射到桶,不同的哈希值对应不同的桶,但不同的元素关键字经过哈希函数可能得到同一哈希值。这意味着无序容器的一个桶中会有0到多个元素。

由关键字通过哈希函数映射到哈希值的效率通常较高,因此在无序容器中查找某元素的效率,主要由在同一桶中查找元素的效率决定。在理想状态下,我们希望每个关键字只映射到同一个桶。

为了提高桶的效率,标准库提供了管理桶的一系列操作:

桶接口:

c.bucket_count()

正在使用桶的数量。

c.max_bucket_count()

容器能容纳的最多的桶的数量

c.bucket_size(n)

第n个桶中有多少元素

c.bucket(k)

关键字为k的元素在哪个桶中

local_iterator

桶中元素的迭代器类型

const_local_iterator

桶迭代器的const版本

begin()、end()

桶n的首元素迭代器和尾后迭代器

cbegin()、cend()

const版本的首元素和尾后迭代器

c.load_factor()

每个桶的平均元素数量,返回float值

c.max_load_factor()

桶平均元素阈值,容器试图维护的桶平均元素数量,当load_factor()的值超过max_load_factor()时,容器将调整桶的大小。

c.rehash(n)

重组存储,使桶个数大于n且bucket_count > size/max_load_factor(使桶平均元素个数维持在max_load_factor以下)

c.reserve(n)

重组存储,使c可以保存n个元素而不必rehash

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值