Namespaces
Variants

std::hash<std::optional>

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
 
Definido en el encabezado <optional>
template< class T >
struct hash<std::optional<T>>;
(desde C++17)

La especialización de plantilla de std::hash para la clase std::optional permite a los usuarios obtener hashes de los valores contenidos en objetos optional.

La especialización std::hash<std::optional<T>> está habilitada (ver std::hash) si std::hash<std::remove_const_t<T>> está habilitado, y está deshabilitada en caso contrario.

Cuando está habilitada, para un objeto o de tipo std::optional<T> que contiene un valor, std::hash<std::optional<T>>()(o) se evalúa al mismo valor que std::hash<std::remove_const_t<T>>()(*o). Para un optional que no contiene un valor, el hash no está especificado.

No se garantiza que las funciones miembro de esta especialización sean noexcept porque el hash del tipo subyacente podría lanzar excepciones.

Parámetros de plantilla

T - el tipo del valor contenido en el objeto optional

Ejemplo

#include <iostream>
#include <optional>
#include <string>
#include <unordered_set>
using namespace std::literals;
int main()
{
    using OptStr = std::optional<std::string>;
    // hash<optional> makes it possible to use 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';
}

Salida posible:

def     11697390762615875584
(null)  18446744073709548283
abc     3663726644998027833
ABC     11746482041453314842

Véase también

(C++11)
objeto función hash
(plantilla de clase)