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