Namensräume
Varianten
Aktionen

std::hash<std::optional>

Von cppreference.com
< cpp‎ | utility‎ | optional
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
Definiert in der Header-Datei <optional>
template< class T >
struct hash<std::optional<T>>;
(seit C++17)

Die Template-Spezialisierung von std::hash für die Klasse std::optional ermöglicht es Benutzern, Hashes der Werte zu erhalten, die in optional-Objekten enthalten sind.

Die Spezialisierung std::hash<std::optional<T>> ist aktiviert (siehe std::hash), wenn std::hash<std::remove_const_t<T>> aktiviert ist, und ist andernfalls deaktiviert.

Wenn aktiviert, evaluiert für ein Objekt o vom Typ std::optional<T>, das einen Wert enthält, std::hash<std::optional<T>>()(o) denselben Wert wie std::hash<std::remove_const_t<T>>()(*o). Für ein Optional, das keinen Wert enthält, ist der Hash nicht spezifiziert.

Die Member-Funktionen dieser Spezialisierung sind nicht garantiert `noexcept`, da der Hash des zugrunde liegenden Typs möglicherweise eine Ausnahme auslöst.

[bearbeiten] Template-Parameter

T - der Typ des Wertes, der im optional-Objekt enthalten ist

[bearbeiten] Beispiel

#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';
}

Mögliche Ausgabe

def     11697390762615875584
(null)  18446744073709548283
abc     3663726644998027833
ABC     11746482041453314842

[bearbeiten] Siehe auch

(C++11)
Hash-Funktionsobjekt
(Klassenvorlage) [edit]