C++ 命名要求: Hash (自 C++11 起)
一个 Hash 是一个函数对象,其输出仅取决于输入,并且在给定不同输入值时产生相同输出的概率非常低。
要求
类型 T 满足 Hash,如果
- 类型 T 满足 FunctionObject、CopyConstructible、Destructible,并且
给定
h
,类型为T
或const T
的值,其参数类型为Key
k
,可转换为Key
或const Key
类型的值u
,类型为Key
的左值表达式
表达式 | 返回类型 | 要求 |
---|---|---|
h(k) | std::size_t | 返回的值在程序的整个运行期间仅取决于 k 的值 在程序的一次给定执行中,所有对 h(k) 的求值对于相同的 k 值都会产生相同的结果。对于 a!=b ,h(a)==h(b) 的概率应接近 1.0/std::numeric_limits<std::size_t>::max(). |
h(u) | std::size_t | u 未被修改 |
标准库
pub | hash(C++11) | 哈希函数对象 |
缺陷报告
以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布时的行为 | 正确行为 |
---|---|---|---|
LWG 2291 | C++11 | 在所有情况下都要求相同参数产生相同结果 | 仅在单次执行中要求 |