std::hash<std::optional>
| 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) |