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
Libérer: 2024-12-16 06:41:25
original
332 Les gens l'ont consulté

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 >>'
Copier après la connexion

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;
    }
};
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal