1、新标准定义了四个无序关联容器,有序容器是用比较运算符来组织元素的,而无序容器是使用一个哈希函数和关键字类型的==运算符,在关键字元素没有明显的序关系的情况下,无序容器是非常有用的,在某些应用中,维护序代价非常高昂
2、除了哈希管理 *** 作之外,无序容器提供了与有序容器相同的 *** 作
3、无序容器在储存上组织为一组桶,每个桶保存零个或多个元素,无序容器用一个哈希函数将元素映射到桶中。为了访问一个元素,容器首先计算元素的哈希值,它指出应该搜索那个桶,容器将具有一个特定哈希值的所有元素保存在相同的桶中
4、理想情况下,哈希函数可以将每个特定的值映射到统一的桶中,但是也允许将不同关键字的元素映射到同一个桶。当我们锁定到一个有多个元素的桶时,就需要顺序搜索桶中的元素,由此来查找我们想要的那个,此过程就需要大量比较 *** 作
5、无序容器提供了一组管理桶的函数,这些成员函数允许我们查询容器的状态以及在必要时强制容器进行重组
桶接口 | |
c.bucket_count() | 正在使用的桶数目 |
c.max_bucket_count() | 容器能容纳的最多的桶的数量 |
c.bucket_size(n) | 第n个桶中有多少个元素 |
c.bucket(k) | 关键字为k的元素在哪个桶中 |
桶迭代 | |
local_iterator | 可以用来访问桶中元素的迭代器类型 |
const_local_iterator | 桶迭代器的const版本 |
c.begin(n), c.end(n) | 桶n的首元素迭代器和尾后迭代器 |
c.cbegin(n), c.cend(n) | 与前两个函数类似,但返回const_local_iterator |
哈希策略 | |
c.load_factor() | 每个桶的平均元素数量,返回float值 |
c.max_load_factor() | c试图维护的平均桶大小,返回float值。c会在需要时添加新的桶,以使得load_factor<=max_load_factor |
c.rehash(n) | 重组存储,使得bucket_count>=n且bucket_count>size/max_load_factor |
c.reserve(n) | 重组存储,使得c可以保存n个元素且不必rehash |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)