C++ 名前付き要件: Hash (C++11 以降)
From cppreference.com
Hash は、その出力が入力のみに依存し、異なる入力値に対して同じ出力を生成する確率は非常に低い関数オブジェクトです。
[編集] 要件
型 T は、以下の場合に Hash を満たします。
- 型
Tは、FunctionObject、CopyConstructible、Destructible であり、
以下を考えます。
- h は、型
Tまたはconst Tの値で、その引数型はKeyです。 - k は、
Keyまたは const Key に変換可能な値です。 - u は、型
Keyの lvalue 式です。
以下の式は有効であり、指定された効果を持つ必要があります。
| Expression | 戻り値の型 | 要件 |
|---|---|---|
| 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 は変更されません。 |
[編集] 標準ライブラリ
| (C++11) |
ハッシュ関数オブジェクト (クラステンプレート) |
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 2291 | C++11 | すべてのケースで同じ引数に対して同じ結果が必要でした | 単一の実行内でのみ要求されます |