std:: hash <std::optional>
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Observers | ||||
| Iterators | ||||
|
(C++26)
|
||||
|
(C++26)
|
||||
| Monadic operations | ||||
|
(C++23)
|
||||
|
(C++23)
|
||||
|
(C++23)
|
||||
| Modifiers | ||||
| Non-member functions | ||||
| Deduction guides | ||||
| Helper classes | ||||
|
hash
<std::optional>
|
||||
| Helper objects | ||||
|
Definiert im Header
<optional>
|
||
|
template
<
class
T
>
struct hash < std:: optional < T >> ; |
(seit C++17) | |
Die Template-Spezialisierung 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, und andernfalls deaktiviert.
Wenn aktiviert, ergibt sich 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 Memberfunktionen dieser Spezialisierung sind nicht garantiert noexcept, da der Hash des zugrundeliegenden Typs möglicherweise eine Exception wirft.
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) |