sort(mMyClassVector.begin(), mMyClassVector.end(),
[](const MyClass & a, const MyClass & b)
{
return a.mProperty > b.mProperty;
});
Je voudrais utiliser une fonction lambda pour trier les classes personnalisées au lieu de lier une méthode d'instance. Cependant, le code ci-dessus génère l'erreur:
erreur C2564: 'const char *': une conversion de style fonction en type intégré ne peut prendre qu'un seul argument
Cela fonctionne bien avec boost::bind(&MyApp::myMethod, this, _1, _2)
.
Réponses:
Je l'ai.
J'ai supposé qu'il comprendrait que l'opérateur> retournait un booléen (par documentation). Mais apparemment ce n'est pas le cas.
la source
operator>
, alors.a.mProperty>b.mProperty
produira définitivement un booléen.operator<
, nonoperator>
?<
, pour l'ordre croissant standard. J'ai édité la réponse pour qu'il soit clair que c'était un tri décroissant mais apparemment ma modification n'a pas été utile et a été effacée!Trop de code, vous pouvez l'utiliser comme ceci:
Remplacez "vec" par votre classe et c'est tout.
la source
Le problème peut-il provenir de la ligne "a.mProperty> b.mProperty"? J'ai obtenu le code suivant pour fonctionner:
La sortie est:
la source