Introduction
Lorsqu'ils tentent d'utiliser des cartes STL avec des classes définies par l'utilisateur comme clés, les programmeurs peuvent rencontrer des messages d'erreur énigmatiques, entravant leur progrès. Cet article examine la raison de cette erreur et explore des approches alternatives pour utiliser std::maps efficacement.
L'erreur cryptique et la raison
Comme illustré dans l'exemple fourni , l'utilisation de types définis par l'utilisateur comme clés de mappage génère une erreur provenant de l'incapacité du compilateur à localiser un opérateur de comparaison approprié pour le type spécifique. Dans ce cas, std::map repose sur la disponibilité de l'opérateur< fonction pour déterminer l'ordre des éléments.
Approches alternatives
1. Objet de fonction de comparateur :
Une méthode pour contourner l'erreur consiste à définir un objet de fonction de comparateur, qui implémente l'opérateur< fonctionnalité. Cette approche vous permet d'établir une logique de comparaison sans l'exposer via une surcharge d'opérateurs sur la classe définie par l'utilisateur.
Par exemple, l'extrait de code suivant utilise un objet fonction comparateur pour comparer et trier les instances de classe 1 :
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::mapc2int; 2. Spécialisation de std::less:
Une approche alternative consiste à spécialiser le modèle std::less pour fournir la sémantique de comparaison spécifiquement pour le type défini par l'utilisateur. Cela garantit une intégration transparente avec le comportement de comparaison par défaut de std::map sans exposer un opérateur< surcharge :
namespace std { template<> struct less{ bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; } En adoptant l'une ou l'autre de ces alternatives, les programmeurs peuvent utiliser efficacement std::maps avec des clés de type définies par l'utilisateur, éliminant ainsi le besoin d'un opérateur< surcharges tout en conservant la flexibilité et l'efficacité offertes par les cartes STL.
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!