跳到主要内容

C++ 命名要求: Hash (自 C++11 起)

一个 Hash 是一个函数对象,其输出仅取决于输入,并且在给定不同输入值时产生相同输出的概率非常低。

要求

类型 T 满足 Hash,如果

给定

  • h,类型为 Tconst T 的值,其参数类型为 Key
  • k,可转换为 Keyconst Key 类型的值
  • u,类型为 Key左值表达式
表达式返回类型要求
h(k)std::size_t返回的值在程序的整个运行期间仅取决于 k 的值
在程序的一次给定执行中,所有对 h(k) 的求值对于相同的 k 值都会产生相同的结果。
对于 a!=bh(a)==h(b) 的概率应接近 1.0/std::numeric_limits<std::size_t>::max().
h(u)std::size_tu 未被修改

标准库

pubhash(C++11)哈希函数对象

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 2291C++11在所有情况下都要求相同参数产生相同结果仅在单次执行中要求

C++ 命名要求: Hash (自 C++11 起)

一个 Hash 是一个函数对象,其输出仅取决于输入,并且在给定不同输入值时产生相同输出的概率非常低。

要求

类型 T 满足 Hash,如果

给定

  • h,类型为 Tconst T 的值,其参数类型为 Key
  • k,可转换为 Keyconst Key 类型的值
  • u,类型为 Key左值表达式
表达式返回类型要求
h(k)std::size_t返回的值在程序的整个运行期间仅取决于 k 的值
在程序的一次给定执行中,所有对 h(k) 的求值对于相同的 k 值都会产生相同的结果。
对于 a!=bh(a)==h(b) 的概率应接近 1.0/std::numeric_limits<std::size_t>::max().
h(u)std::size_tu 未被修改

标准库

pubhash(C++11)哈希函数对象

缺陷报告

以下改变行为的缺陷报告已追溯应用于先前发布的 C++ 标准。

DR应用于发布时的行为正确行为
LWG 2291C++11在所有情况下都要求相同参数产生相同结果仅在单次执行中要求