🥕无序关联容器
2022-5-20
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
新标准库定义了4个无序关联容器(unordered associative container),这些容器不是使用比较运算符来组织元素,而是使用哈希函数(hash function) 和关键字类型的 == 运算符组织元素。
如果关键字类型固有就是无序的,或者性能测试发现问题可以用哈希技术解决,就可以使用无序容器。
无序容器和对应的有序容器通常可以相互替换。但是由于元素未按顺序存储,使用无序容器的程序输出一般会与有序容器的版本不同。
无序容器在存储上组织为一组桶,每个桶保存零或多个元素。无序容器使用一个哈希函数将元素映射到桶。为了访问一个元素,容器首先计算元素的哈希值,它指出应该搜索哪个桶。容器将具有一个特定哈希值的所有元素都保存在相同的桶中。因此无序容器的性能依赖于哈希函数的质量和桶的数量及大小。
 
无序容器管理操作:
notion image
默认情况下,无序容器使用关键字类型的==运算符比较元素,还使用一个 hash<key_type> 类型的对象来生成每个元素的哈希值。标准库为内置类型和一些标准库类型提供了hash模板。因此可以直接定义关键字是这些类型的无序容器,而不能直接定义关键字类型为自定义类类型的无序容器,必须先提供对应的hash模板版本。
 
除了使用默认的hash 模板之外,还可以提供自己的相等比较函数和计算哈希值的函数
 
上面的代码同时指定了 hash 函数和相等性比较函数,如果我们的类有自己的 == 操作符,可以仅仅只覆盖哈希函数:
 
  • C++
  • 关联容器操作空间配置器
    目录