Maison > développement back-end > C++ > Puis-je utiliser des paires comme clés dans les cartes C non ordonnées, et comment ?

Puis-je utiliser des paires comme clés dans les cartes C non ordonnées, et comment ?

Linda Hamilton
Libérer: 2024-12-16 14:11:10
original
130 Les gens l'ont consulté

Can I Use Pairs as Keys in C   Unordered Maps, and How?

Puis-je utiliser des paires comme clés dans des cartes non ordonnées ?

En C, vous pouvez rencontrer une erreur de compilation lors de l'utilisation d'une carte unordered_map avec une paire comme sa clé. Le problème vient de l'utilisation d'un type personnalisé comme clé, sans fournir de fonction de hachage appropriée.

Comprendre l'erreur

L'erreur que vous rencontrez est due au fait que unordered_map repose sur un mécanisme de hachage pour localiser efficacement les paires clé-valeur. Cependant, il lui manque une fonction de hachage par défaut pour les types complexes comme les paires. Le message d'erreur indique que le compilateur ne peut pas implicitement instancier une fonction de hachage non définie pour votre type de clé de paire.

Solution : fournir une fonction de hachage

Pour résoudre ce problème, vous Vous devez définir une fonction de hachage qui calcule une valeur de hachage unique pour votre type de paire de votes. Cette fonction doit accepter une paire comme argument et générer une valeur de hachage.

Voici un exemple d'implémentation de fonction de hachage :

struct pair_hash {
    template<class T1, class T2>
    std::size_t operator()(const std::pair<T1, T2> &p) const {
        auto h1 = std::hash<T1>()(p.first);
        auto h2 = std::hash<T2>()(p.second);
        return h1 ^ h2;
    }
};
Copier après la connexion

Avec cette fonction de hachage, vous pouvez modifier votre code pour créer un unordered_map qui utilise des paires comme clés :

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
Copier après la connexion

Maintenant, vous pouvez utiliser ce unordered_map comme prévu, en évitant la compilation erreur.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal