[C++] Expression : invalid operator < 解決方法

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章