從技術上說,用于排序關聯容器的比較函數必須在它們所比較的對象上定義一個“嚴格的弱序化(strict weak ordering)”。(傳給sort等算法的比較函數也有同樣的限制),就是兩個對象比大小或先后的規則,比如兩個 string對象比大小的規則就是看首字母的ASCII碼誰小,誰就小;如果相同看第二個字母。。。依次這樣,就是這樣的規則。
確實如下文所說。
VS2008的sort()函數的用法貌似挺郁悶的。。。
?
前些時候寫了個sort的compare函數,錯誤"Expression : invalid operator <",baidu+google了一下,沒有找到比較明確的說法,不過找到了微軟的一個網頁,說得算是很清楚,不過看得不太明白。意思大概是出這個錯是因為VS2005,VS2008后的sort()里,用的是所謂的“?
?
網頁: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 )
{
?
?
?
?
?
}
?
?
3.為了解決錯誤,應把以上代碼改寫為以下兩種中的任一種:
?
(1)
?
bool CustPredicate (int elem1, int elem2 )
{
?
?
?
?
?
}
(2)
Second Option:-
bool CustPredicate (int elem1, int elem2 )
{
?
}