std::hash<std::optional>
| Défini dans l'en-tête <optional>
|
||
template< class T >
struct hash<std::optional<T>>;
|
(depuis C++17) | |
La spécialisation de modèle de std::hash pour la classe std::optional permet aux utilisateurs d'obtenir les hachages des valeurs contenues dans les objets optional.
La spécialisation std::hash<std::optional<T>> est activée (voir std::hash) si std::hash<std::remove_const_t<T>> est activé, et est désactivée sinon.
Lorsqu'elle est activée, pour un objet o de type std::optional<T> qui contient une valeur, std::hash<std::optional<T>>()(o) évalue à la même valeur que std::hash<std::remove_const_t<T>>()(*o). Pour un optional qui ne contient pas de valeur, le hachage est non spécifié.
Les fonctions membres de cette spécialisation ne sont pas garanties noexcept car le hachage du type sous-jacent peut lever une exception.
Paramètres du modèle
| T | - |
le type de la valeur contenue dans l'objet
optional
|
Exemple
#include <iostream> #include <optional> #include <string> #include <unordered_set> using namespace std::literals; int main() { using OptStr = std::optional<std::string>; // hash<optional> permet d'utiliser 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'; }
Sortie possible :
def 11697390762615875584 (null) 18446744073709548283 abc 3663726644998027833 ABC 11746482041453314842
Voir aussi
|
(C++11)
|
objet fonction de hachage
(modèle de classe) |