如何用 lambda 排序?

新手上路,请多包涵
sort(mMyClassVector.begin(), mMyClassVector.end(),
    [](const MyClass & a, const MyClass & b)
{
    return a.mProperty > b.mProperty;
});

我想使用 lambda 函数对自定义类进行排序,而不是绑定实例方法。但是,上面的代码会产生错误:

错误 C2564:“const char *”:将函数样式转换为内置类型只能采用一个参数

它适用于 boost::bind(&MyApp::myMethod, this, _1, _2)

原文由 BTR 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 414
1 个回答

您可以像这样对数组进行排序:

 #include <bits/stdc++.h>
using namespace std;
int main() {
    int q[] = {1, 3, 5, 7, 9, 2, 4, 6, 8 ,10};
    sort(q, q + 10, [&](int A, int B) { return A < B; });
    for (int i = 0; i < 10; i++)
        cout << q[i] << ' ';
    return 0;
}

 before sort: 1 3 5 7 9 2 4 6 8 10
after sort: 1 2 3 4 5 6 7 8 9 10

我总是喜欢使用 lambda 在 acm 比赛中对结构数组进行排序,如下所示:

 struct item {
    int a, b;
};

vector<item> q;

sort(q.begin(), q.end(), [&](item t1, item t2) {
    return t1.a < t2.a;
});

原文由 Heyya 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题