2015-08-28 43 views
9

我正在嘗試對一些整數進行排序並製作奇數整數,然後是偶數整數。我使用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 
}); 

執行時,遇到一個錯誤說:「表達式:無效的比較」。我不知道爲什麼會導致這個錯誤。如何修改它?

回答

11

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,如果你想分區,穩定(保留元素的相對順序)。

+0

...它*可能濫用'sort'進行分區,但這是最好的答案。 – Potatoswatter