std::hash<std::optional>
From ru.cppreference.net
| Определён в заголовке <optional>
|
||
template< class T >
struct hash<std::optional<T>>;
|
(начиная с C++17) | |
Специализация шаблона std::hash для класса std::optional позволяет пользователям получать хеши значений, содержащихся в объектах optional.
Специализация std::hash<std::optional<T>> включена (см. std::hash) если std::hash<std::remove_const_t<T>> включена, и отключена в противном случае.
Когда включена, для объекта o типа std::optional<T>, содержащего значение, std::hash<std::optional<T>>()(o) вычисляется в то же значение, что и std::hash<std::remove_const_t<T>>()(*o). Для optional, не содержащего значения, хеш не определён.
Функции-члены этой специализации не гарантированно являются noexcept, так как хеширование базового типа может генерировать исключения.
Параметры шаблона
| T | - |
тип значения, содержащегося в объекте
optional
|
Пример
Запустить этот код
#include <iostream> #include <optional> #include <string> #include <unordered_set> using namespace std::literals; int main() { using OptStr = std::optional<std::string>; // hash<optional> позволяет использовать unordered_set std::unordered_set<OptStr> s = { "ABC"s, "abc"s, std::nullopt, "def"s }; for (const auto& o : s) std::cout << o.value_or("(null)") << '\t' << std::hash<OptStr>{}(o) << '\n'; }
Возможный вывод:
def 11697390762615875584 (null) 18446744073709548283 abc 3663726644998027833 ABC 11746482041453314842
Смотрите также
|
(C++11)
|
функциональный объект хеш-функции
(шаблон класса) |