Namespaces
Variants

std::hash<std::optional>

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (déprécié en C++20)
Fonctions de comparaison d'entiers
(C++20)(C++20)(C++20)    
(C++20)
Échange et opérations sur les types
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Types de vocabulaire courants
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
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)