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; } };
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>;
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!