簡體   English   中英

std :: sort functor一行

[英]std::sort functor one line

我已經聲明了函子,並使用該函子作為參數進行了std :: sort調用。 碼:

struct
{
    bool operator() (const CString& item1, const CString& item2){
        return MyClass::Compare( Order(_T("DESC")), item1, item2);
    }

}Comparer;

std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(), Comparer);

一個簡單的問題:我可以一行完成嗎?

如果您的編譯器支持 ,則可以使用lambda

std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(),
          [](const CString& item1, const CString& item2) {
              return MyClass::Compare( Order(_T("DESC")), item1, item2);
          });

如果沒有 ,則可以通過使用函數而不是函子來將其簡化一點

static inline bool Comparer(const CString& item1, const CString& item2) {
    return MyClass::Compare(Order(_T("DESC")), item1, item2);
}

並將其用作最后一個參數。

不幸的是(?),只有一元或二進制函數對象的函數包裝器。 如果也有三元函數對象的包裝器,則可以執行以下操作

std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(),
          std::bind1st(std::ptr_fun(MyClass::Compare), Order(_T("DESC"))));

如果您考慮使用boost-bind ,則可以嘗試使用

std::sort(AllObjects.GetData(), AllObjects.GetData() + AllObjects.GetSize(),
          boost::bind(MyClass::Compare, Order(_T("DESC")), _1, _2));

這等效於 std::bind

暫無
暫無

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

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