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