我试图对一些整数进行排序,并使奇数整数后跟偶数。我正在使用Visual Studio 2015。
这是我的代码:
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
});
执行时,遇到错误“表达式:无效比较器”。我不知道为什么会导致这个错误。如何修改?
答案 0 :(得分:17)
sort
需要strict weak ordering。你的比较器不是一个。在许多其他方面,对于严格的弱排序,comp(x, x)
必须是false
。
sort
是错误的算法(是的,你可以扭曲它来做你想做的事;不,你不应该这样做)。你想要做的是一个分区。为此,我们有std::partition
:
std::partition(std::begin(w), std::end(w), [](int x) { return x % 2 != 0; });
或std::stable_partition
,如果您希望分区稳定(保留元素的相对顺序)。