无序关联容器是使用哈希函数和关键字类型==运算符来组织元素的,而不是比较运算符。
我们之前使用过map对word_count进行遍历,这unordered_map唯一的不同就是输出的顺序可能不同(以哈希函数的顺序输出)
(资料图)
管理桶
无序容器在存储上组织为一组桶,每个桶保存零个或多个元素。无序容器使用一个哈希函数将元素映射到桶。为了访问一个元素,容器首先计算元素的哈希值,他指出应该搜索哪个桶。容器将具有一个特定哈希值的所有元素都保存在相同的桶中,如果容器允许重复,所有具有相同关键字的元素也会在同一个桶中。因此无序容器的性能依赖于哈希函数的质量和桶的数量大小。
对于相同的参数,哈希函数必须总是产生相同的结果。理想下,哈希函数还能将每个特定的值映射到唯一的桶,但是将不同关键字的元素映射在同一个桶中也是可以的。当一个桶保存多个元素时,需要顺序搜索这些元素来查找。所以如果一个桶很大的话,查找就会消耗很多时间。
无序容器提供了一组管理桶的函数
无序容器对关键字类型的要求
默认情况下,无序容器使用关键字类型==运算符来比较元素,他们还使用hash<key_type>类型的对象来生成每个元素的哈希值。标准库为内置类型(包括指针)提供了hash模板,还未一些标准库类型,包括string和后面要介绍的智能指针类型定义了hash。
因此,我们可以直接定义关键字是内置类型、string还是智能指针类型。
但是我们不能直接定义关键字类型为自定义类类型的无序容器。和容器不同,不能直接使用哈希模板,而必须提供我们自己的hash模板版本,我们将在以后介绍如何做到这一点。
我们不使用默认的hash,而是使用另一种方法,例如为了能将Sales_data用作关键字,我们需要提供函数来代替==运算符和哈希值计算函数
我们使用hasher函数使用标准库hash来为isbn成员计算哈希值,该hash建立在string之上,类似的利用eqOp函数比较isbn。
X 关闭
Copyright © 2015-2023 港澳母婴网版权所有 备案号:京ICP备2023022245号-31 联系邮箱:435 226 40 @qq.com