2015-08-28 10 views
9

का उपयोग करते समय सॉर्ट करते समय "अमान्य तुलनित्र" मैं कुछ पूर्णांक को सॉर्ट करने और यहां तक ​​कि अजीब पूर्णांक बनाने के लिए प्रयास कर रहा हूं।त्रुटि: कस्टम तुलना फ़ंक्शन

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 
}); 

जब मार डाला, यह एक त्रुटि का सामना करना पड़ता कहते हैं, "अभिव्यक्ति:: अवैध तुलनित्र" मैं दृश्य स्टूडियो का उपयोग कर रहा 2015

यहाँ मेरी कोड है। मुझे नहीं पता कि यह इस त्रुटि का कारण क्यों होगा। इसे कैसे संशोधित करें?

उत्तर

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

संबंधित मुद्दे