Maison >développement back-end >C++ >Comment résoudre les erreurs de compilation de cartes non ordonnées avec des clés de paire ?

Comment résoudre les erreurs de compilation de cartes non ordonnées avec des clés de paire ?

DDD
DDDoriginal
2024-12-16 06:41:25333parcourir

How to Resolve Unordered Map Compilation Errors with Pair Keys?

Erreur de compilation de carte non ordonnée avec des paires de clés

Lorsque vous essayez de créer une carte non ordonnée où les clés sont des paires, vous pouvez rencontrer l'erreur suivante :

Implicit instantiation of undefined template 'std::__1::hash, std::__1::basic_string >>'

Cette erreur se produit car les cartes non ordonnées nécessitent que des fonctions de hachage soient définies pour leurs types de clés. Tandis que le hachage est disponible par défaut, une fonction de hachage n'est pas fournie pour pair.

Solution : fournir une fonction de hachage personnalisée

Pour résoudre ce problème, vous Vous devez définir une fonction de hachage personnalisée pour votre type de clé de paire. Voici un exemple d'implémentation :

struct pair_hash {
    template<class T1, class T2>
    size_t operator()(const pair<T1, T2>& p) const {
        auto h1 = hash<T1>()(p.first);
        auto h2 = hash<T2>()(p.second);
        return h1 ^ h2;
    }
};

Cette fonction de hachage combine les valeurs de hachage des composants individuels de la paire à l'aide de XOR au niveau du bit (^).

Utilisation de la fonction de hachage personnalisée

Une fois que vous avez défini la fonction de hachage, vous pouvez l'utiliser pour créer une carte non ordonnée avec des clés de paire comme suit :

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

Unordered_map um;

Avec cette modification, l'erreur de compilation ne se produira plus, et vous pourrez utiliser la carte non ordonnée comme prévu.

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