Comment surcharger moins d’opérateur dans une classe de modèle pour un algorithme de sorting?

J’ai une classe auto-définie utilisant un modèle, comme ceci:

template class foo { public: T a; bool operator<(const foo &f); //other functions... } template bool foo::operator<(const foo &f) {return a - fa;} 

Maintenant, je fais quelques foos et leur donne de la valeur, alors je veux sortinger ce tableau:

 foo* fp = new foo[3]; //give each element value sort(fp, fp+3); //run-time error 

Lorsque j’utilise la fonction de sorting, une erreur d’exécution s’est produite.

Est-ce que j’ai fait quelque chose de mal? Aidez-moi, s’il vous plaît.

Probablement comme ça:

 template bool foo::operator<(const foo &f) {return a < fa;} 

std::sort exige que la fonction de comparaison (votre opérateur inférieur à dans ce cas) définisse un ordre faible ssortingct . Votre implémentation ne le fait pas, car il est possible que A < B et B < A soient vrais.

Si T est castable à bool,

 template bool foo::operator<(const foo &f) {return a - fa;} 

retournera true toujours sauf a == fa Peut-être avez-vous besoin de quelque chose comme:

 template bool foo::operator<(const foo &f) {return a < fa;} 

De toute évidence, une erreur d'exécution se produit car votre opérateur less est incorrect pour la fonction de sorting.