Maison >développement back-end >C++ >Comment utiliser des paires comme clés dans des cartes non ordonnées en C ?

Comment utiliser des paires comme clés dans des cartes non ordonnées en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-09 07:17:07723parcourir

How to Use Pairs as Keys in Unordered Maps in C  ?

Utilisation de paires comme clés dans des cartes non ordonnées

Lors de la tentative de déclaration d'une carte non ordonnée où les clés sont des paires (Vote = paire

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string > >'</p>
<p>Cette erreur survient car unordered_map s'appuie sur une fonction de hachage adaptée à son type de clé. Étant donné que la fonction de hachage par défaut n'est pas applicable aux paires, vous devez fournir une fonction de hachage personnalisée.</p>
<p>Par exemple, considérez la fonction de hachage personnalisée suivante (pair_hash) :</p>
<pre class="brush:php;toolbar:false">struct pair_hash {
    template <class T1, class T2>
    std::size_t operator() (const std::pair<T1, T2> &amp;p) const {
        auto h1 = std::hash<T1>{}(p.first);
        auto h2 = std::hash<T2>{}(p.second);
        return h1 ^ h2;
    }
};

Cette fonction de hachage combine les valeurs de hachage des composants de la paire à l'aide de l'opérateur XOR. Pour l'utiliser, modifiez la déclaration unordered_map comme suit :

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;

Cette approche permet la création de cartes non ordonnées avec des paires comme clés en fournissant une fonction de hachage adaptée. Cependant, il convient de noter que cette implémentation simpliste peut ne pas présenter de propriétés de hachage optimales et envisager d'explorer la fonction hash_combine de Boost ou de définir hash_value pour de meilleurs résultats.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn