C++: la surcharge d'Opérateur de < pour des pointeurs vers des objets
Je voudrais comparer deux objets par le biais de leurs adresses. J'ai essayé de surcharge d'opérateur et il ne semble pas fonctionner pour les pointeurs, mais fonctionne pour les objets eux-mêmes. Voici le code correspondant:
class C {
public:
int x;
};
.
.
.
bool operator <( C *ptr_c1, C *ptr_c2 )
{
return ( (*ptr_c1).x < (*ptr_c2).x );
}
- Voir les suivants: * le Universal
less<>
pour les pointeurs en C++ standard * Quelles sont les opérations prises en charge par pointeur brut et de pointeur de fonction en C/C++? - Dites-vous que, compte tenu des pointeurs vers
C
vous voulez comparer, mais pour la comparaison dans certains de leurs membres, tels quex
? - oui, c'est exactement besoin!
Vous devez vous connecter pour publier un commentaire.
Correcte.
Correcte.
Alors, quelle est la question?
Voulez-vous d'utiliser des pointeurs triés conteneur?
Avec:
C++ 11 et plus tard
En C++ 03
std::set
est censé être une classe de comparaison. Mettre le test enX
et puis déclarantstd::set<X, X>
ne semble pas très logique.operator<
pourX
lui-même?Un pointeur est un natif C++ de type et vous ne pouvez surcharger les opérateurs pour les types définis par l'utilisateur (c'est à dire les classes).
Si c'était possible, il serait violer le principal de "moindre surprise" et de causer pointeur de comparaisons à se comporter différemment selon que votre définition est visible. Ce serait probablement très déroutant.
Si vous souhaitez utiliser une comparaison de remplacement pour une utilisation dans un conteneur ou avec des algorithmes, notez que vous pouvez fournir un remplacement pour le défaut
std::less
dans la plupart des conteneurs associatifs et des algorithmes qui nécessitent un ordre partiel.std::less
?std::less
pour les matières premières, les pointeurs. En utilisant une autre fonction de l'objet à remplacerstd::less
devrait être moins surprenant, car il doit être spécifié explicitement.std::less
qui est pas une spécialisation serait moins surprenant (car il doit être utilisé de manière explicite), j'ai mal lu votre réponse, j'ai compris que tu voulais se spécialisentstd::less
. De toute façon, je ne pouvais pas trouver une référence pour la spécialisation destd::less
pour les matières premières, les pointeurs d'être illégal. De qui/de quoi, dit-il, est?