Skip to main content

C++ named requirements: Hash (since C++11)

A Hash is a function object for which the output depends only on the input and has a very low probability of yielding the same output given different input values.

Requirements

The type T satisfies Hash if

Given

  • h, a value of type T or const T, whose argument type is Key
  • k, a value of type convertible to Key or const Key
  • u, an lvalue expression of type Key
ExpressionReturn typeRequirements
h(k)std::size_tthe returned value depends only on the value of k for the duration of the program
All evaluations of h(k) executed within a given execution of a program yield the same result for the same value of k.
The probability of h(a)==h(b) for a!=b should approach 1.0/std::numeric_limits<std::size_t>::max().
h(u)std::size_tu is not modified

Standard library

pubhash(C++11)hash function object

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DRApplied toBehavior as publishedCorrect behavior
LWG 2291C++11same results for same arguments were required in all casesonly required within a single execution

C++ named requirements: Hash (since C++11)

A Hash is a function object for which the output depends only on the input and has a very low probability of yielding the same output given different input values.

Requirements

The type T satisfies Hash if

Given

  • h, a value of type T or const T, whose argument type is Key
  • k, a value of type convertible to Key or const Key
  • u, an lvalue expression of type Key
ExpressionReturn typeRequirements
h(k)std::size_tthe returned value depends only on the value of k for the duration of the program
All evaluations of h(k) executed within a given execution of a program yield the same result for the same value of k.
The probability of h(a)==h(b) for a!=b should approach 1.0/std::numeric_limits<std::size_t>::max().
h(u)std::size_tu is not modified

Standard library

pubhash(C++11)hash function object

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DRApplied toBehavior as publishedCorrect behavior
LWG 2291C++11same results for same arguments were required in all casesonly required within a single execution