c++ - std::sort 仿函数一行

标签 c++ sorting line std functor

我已经声明了一个仿函数并调用了 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 .

关于c++ - std::sort 仿函数一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15181378/

相关文章:

c++ - 返回 const 指针(例如 int * const)的函数的用例是什么?

java - JList:按向上/向下按钮排序

C# 绘制多条线

c++ - decltype 导致 is_same<T, T> 失败(相同类型)

C++ 中的模板初始化

c++ - Cereal:序列化多态类型

Powershell 在文件中 move 行

sorting - 为什么 Dart 的默认排序实现击败了我的键排序器?

c# - 我如何按字母顺序对我的 ListView 进行排序?

python - 文件中字符最多的行?