Erreur:“invalid comparateur” lors du tri de l'aide personnalisé de la fonction de comparaison
Je suis en train de trier certaines entiers et de faire des entiers impairs suivie par le même. Je suis à l'aide de Visual Studio 2015.
Voici mon code:
int w[]={1,2,3,4,5,6};
sort(w,w+6,[](const int&i,const int&j)->bool {
return (i&1)==(j&1)//When both are odd or even, the order is OK
||i&1;//if one is odd and one is even,check if the first one is odd
});
Lorsqu'il est exécuté, il rencontre une erreur, dit "Expression: invalid comparateur". Je ne sais pas pourquoi elle serait la cause de cette erreur. Comment le modifier?
OriginalL'auteur James | 2015-08-28
Vous devez vous connecter pour publier un commentaire.
sort
nécessite un faible stricte de la commande. Votre comparateur n'est pas un. Parmi beaucoup d'autres choses, pour un faible stricte de la commande,comp(x, x)
doit êtrefalse
.sort
est le mauvais algorithme pour cela de toute façon (oui, vous pouvez déformer pour faire ce que vous voulez; non, vous ne devriez pas le faire). Ce que vous voulez faire est un partition. Pour cela, nous avonsstd::partition
:Ou
std::stable_partition
, si vous souhaitez que la partition soit stable (préserver l'ordre relatif des éléments).sort
pour le partitionnement, mais c'est la meilleure réponse.il serait
(x % 2) < (y % 2)
? (ou>
ne pense pas que dur sur lequel)OriginalL'auteur T.C.