簡體   English   中英

C ++ STL中SORT的自定義比較功能?

[英]Custom comparison function for SORT in C++ STL?

我在用

       typedef pair < long , pair <bool ,long > > t;
       vector <t> time ;

我需要使用std::sort()函數但使用一個自定義的比較函數對上述向量進行std::sort() 我寫了一個版本,但是不能正常工作。 你能指出我的錯誤嗎?

     bool comp ( const t &a , const t &b){

         if ( a.first < b.first)
             return a.first > b.first ;
         else if ( b.first < a.first )
             return b.first > a.first ;
         else if ( a.first == b.first )
         {
             if ( a.second.first == false && b.second.first == true)
                return a.first > b.first ;
             else if ( a.second.first == true && b.second.first == false)
                return b.first > a.first ;
             else
                return a.first > b.first ;
          }
      }


      inside main(){
         sort ( time.begin() ,time.end() ,comp) ;
      }

自定義案例:

排序前:向量時間

       10 1 1 
      100 0 1
      100 1 2
      200 0 2
      150 1 2
      500 0 2
      200 1 2
      300 0 2

排序后:

      10 1 1
      100 0 1
      100 1 2
      150 1 2
      200 0 2
      200 1 2
      300 0 2
      500 0 2

它應該是:

if ( a.first < b.first)
    return true
else if ( b.first < a.first )
    return false;
// etc.

在您的版本中,兩種情況下均返回false。

您的比較功能未定義順序。 實際上,似乎任何時候a.first != b.first返回true。

我不確定您要哪種自定義訂單。 std :: pair的標准順序將導致類似:

bool
comp( t const& a, t const& b )
{
    if ( a.first != b.first )
        return a.first < b.first;
    else if ( a.second.first != b.second.first )
        return a.second.first < b.second.first;
    else 
        return a.second.second < b.second.second;
}

實際上,它有點復雜,因為它使用的唯一比較運算符是< 但是,如果<!=都可用,並且行為正常,則結果與上述相同。

您可以輕松地采用這種方式以所需的任何順序比較元素。 如果要反轉元素之一的順序,只需將<替換為>

最后,對於布爾值, false小於true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM