VS2008的sort()函數的用法貌似挺鬱悶的。。。
前些時候寫了個sort的compare函數,錯誤"Expression : invalid operator <",baidu+google了一下,沒有找到比較明確的說法,不過找到了微軟的一個網頁,說得算是很清楚,不過看得不太明白。意思大概是出這個錯是因爲VS2005,VS2008後的sort()裏,用的是所謂的“ strict weak ordering”,也就是說,如果a==b,則返回的應該是false,如果返回的是true,則會出上面的錯。
網頁:http://support.microsoft.com/kb/949171
以下摘抄網頁中的說法:
1.strict weak ordering
舉例說明如下:
· Strict: pred(X, X) is always false.
· Weak: If !pred(X, Y) && !pred(Y, X), X==Y.
· Ordering: If pred(X, Y) && pred(Y, Z), then pred(X, Z).
2.出現"Expression : invalid operator <"的寫法
bool CustPredicate (int elem1, int elem2 )
{
if(elem1 > elem2)
return true;
if (elem1 < elem2)
return false;
return true;
}
3.爲了解決錯誤,應把以上代碼改寫爲以下兩種中的任一種:
(1)
bool CustPredicate (int elem1, int elem2 )
{
if(elem1 > elem2)
return true;
if (elem1 < elem2)
return false;
return false; //Should return false if both the vaules are same
}
(2)
Second Option:-
bool CustPredicate (int elem1, int elem2 )
{
return elem1 > elem2;
}