Namespaces
Variants

std:: hash <std::optional>

From cppreference.net
Utilities library
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ée, et est désactivée sinon.

Lorsqu'il est activé, 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 hash est non spécifié.

Les fonctions membres de cette spécialisation ne sont pas garanties d'être noexcept car le hachage du type sous-jacent pourrait 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)