Namespaces
Variants

std::hash<std::optional>

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (grundlegende Typen, RTTI)
Feature-Test-Makros der Bibliothek (C++20)
Programmdienstprogramme
Variadische Funktionen
Koroutinenunterstü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 Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert in Header <optional>
template< class T >
struct hash<std::optional<T>>;
(seit C++17)

Die Templatespezialisierung von std::hash für die std::optional-Klasse ermöglicht es Benutzern, Hashwerte der in optional-Objekten enthaltenen Werte zu erhalten.

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

Wenn sie aktiviert ist, ergibt 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 Hashwert nicht spezifiziert.

Die Mitgliedsfunktionen dieser Spezialisierung sind nicht garantiert noexcept, da der Hash des zugrundeliegenden Typs werfen könnte.

Template-Parameter

T - der Typ des in optional enthaltenen Werts

Beispiel

#include <iostream>
#include <optional>
#include <string>
#include <unordered_set>
using namespace std::literals;
int main()
{
    using OptStr = std::optional<std::string>;
    // hash<optional> ermöglicht die Verwendung von 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

Siehe auch

(C++11)
Hash-Funktionsobjekt
(Klassentemplate)