C++ named requirements: Hash (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Хеш-функция Hash — это функциональный объект, выходные данные которого зависят только от входных данных и имеют очень низкую вероятность получения одинакового выходного значения при различных входных данных.
Требования
Тип
T
удовлетворяет требованиям
Hash
если
-
Тип
Tудовлетворяет требованиям FunctionObject , CopyConstructible , Destructible , и
Дано
-
h
, значение типа
Tилиconst T, тип аргумента которого —Key, -
k
, значение типа, приводимого к
Keyили const Key , -
u
,
lvalue-выражение
типа
Key.
Следующие выражения должны быть корректными и иметь указанные эффекты.
| Выражение | Тип возвращаемого значения | Требования |
|---|---|---|
| h ( k ) | std::size_t |
Возвращаемое значение зависит только от значения
k
в течение выполнения программы.
Все вычисления h ( k ) в рамках данного выполнения программы дают одинаковый результат для одного и того же значения k . Вероятность того, что h ( a ) == h ( b ) для a ! = b должна стремиться к 1.0 / std:: numeric_limits < std:: size_t > :: max ( ) . |
| h ( u ) | std::size_t | u не модифицируется. |
Стандартная библиотека
|
(C++11)
|
функциональный объект хеш-функции
(шаблон класса) |
Отчеты о дефектах
Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2291 | C++11 | одинаковые результаты для одинаковых аргументов требовались во всех случаях | требуется только в рамках одного выполнения |