En C En programmation, l'utilisation de cartes STL avec des classes définies par l'utilisateur rencontre souvent des erreurs énigmatiques du compilateur. Plus précisément, le message d'erreur « aucune correspondance pour 'operator<' in '__x < __y'" est courant lors de la tentative d'accès à un élément à l'aide d'une clé d'un type défini par l'utilisateur.
Le message d'erreur suggère que le compilateur ne peut pas pour trouver l'opérateur < pour comparer deux instances du type défini par l'utilisateur. En effet, par défaut, les cartes STL nécessitent un opérateur de comparaison (operator<) pour trier leurs clés. Cependant, lorsque vous travaillez avec des types définis par l'utilisateur, cet opérateur n'est pas automatiquement disponible.
Au lieu de définir l'opérateur< pour un type défini par l'utilisateur, on peut créer une classe d'objets fonction comparateur. Cette classe implémente une version spécialisée de Operator() qui détermine l'ordre relatif du type défini par l'utilisateur. La carte peut ensuite être spécialisée pour utiliser ce comparateur :
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <h3>Solution 2 : Spécialiser std::less</h3> <p>Une autre alternative consiste à spécialiser le modèle std::less pour le modèle défini par l'utilisateur taper. Cela fournit une définition personnalisée pour Operator() dans la classe std::less :</p> <pre class="brush:php;toolbar:false">namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }
Cette approche permet à la carte d'utiliser par défaut std::less à des fins de comparaison, tout en fournissant une implémentation spécifique pour l'utilisateur. type défini.
Lorsque vous travaillez avec des cartes STL et des types définis par l'utilisateur, il est essentiel de fournir une méthode pour comparer les clés. Ceci peut être réalisé soit via un objet fonction de comparaison, soit en spécialisant std::less. En répondant à cette exigence, les développeurs peuvent utiliser efficacement des cartes avec des types définis par l'utilisateur comme clés.
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!