Пространства имён
Варианты
Действия

std::hash<std::optional>

Материал из cppreference.com
< cpp‎ | utility‎ | optional
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм(C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(C++20)
(C++20)(C++20)(C++20)(C++20)(C++20)(C++20)
Общие утилиты
Дата и время
Функциональные объекты
Библиотека форматирования(C++20)
(C++11)
Операторы отношения (устарело в C++20)
Целочисленные функции сравнения
(C++20)(C++20)(C++20)    
(C++20)
Операции обмена и типа
(C++11)
(C++11)
(C++17)
Общие лексические типы
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Элементарные преобразования строк
(C++17)
(C++17)
 
std::optional
Функции-элементы
Наблюдатели
Монадические операции
Модификаторы
Функции, не являющиеся элементами
Правила вывода
Вспомогательные классы
hash
Вспомогательные объекты
 
Определено в заголовочном файле <optional>
template<class T >
struct hash<std::optional<T>>;
(начиная с C++17)

Специализация шаблона std::hash для класса std::optional позволяет пользователям получать хэши значений, содержащихся в объектах optional.

Специализация std::hash<optional<T>> доступна (смотрите std::hash), если доступна std::hash<std::optional<T>>, иначе не доступна.

Когда доступна, для объекта o типа std::optional<T>, который содержит значение, std::hash<std::optional<T>>()(o) оценивается в то же значение, что и std::hash<std::remove_const_t<T>>()(*o). Для необязательного параметра, который не содержит значения, хэш не указан.

Не гарантируется, что функции-элементы этой специализации будут noexcept, поскольку хэш базового типа может вызвать исключение.

[править]Параметры шаблона

T тип значения, содержащегося в объекте optional

[править]Пример

#include <iostream>#include <optional>#include <string>#include <unordered_set>usingnamespace std::literals;int main(){using OptStr =std::optional<std::string>;   // hash<optional> позволяет использовать unordered_setstd::unordered_set<OptStr> s ={"ABC"s, "abc"s, std::nullopt, "def"s };   for(constauto& o : s){std::cout<< o.value_or("(null)")<<'\t'<<std::hash<OptStr>{}(o)<<'\n';}}

Возможный вывод:

def 11697390762615875584 (null) 18446744073709548283 abc 3663726644998027833 ABC 11746482041453314842

[править]Смотрите также

(C++11)
Объект хеш-функции
(шаблон класса)[править]
close