c++ - c++ 中比较函数的 Lambda 不起作用

标签 c++ lambda

此代码产生错误:

priority_queue<int, vector<int>, [](int a, int b)->bool{return a>b;}> q;

为什么? (我知道对于这样的事情我可以使用 std::greater 或默认排序,但我正在尝试学习如何创建自定义比较器)

产生2个错误:

error: no matching function for call to object of type lambda
error: template argument for template type parameter must be a type

最佳答案

您需要指定类型,而不是 lambda 表达式本身作为模板参数。并且 lambda 应该被指定为构造函数参数。

例如

auto c = [](int a, int b)->bool{return a>b;}; // declare lambda in advance
priority_queue<int, vector<int>, decltype(c)> q(c);
//                               ^^^^^^^^^^^      <- specify the type of lambda
//                                              ^ <- specify the lambda as constructor argument

关于c++ - c++ 中比较函数的 Lambda 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67578528/

相关文章:

ruby - 在 Ruby 中引用传递的 block 中的调用对象

C++:抛出异常调用复制构造函数?

c++ - C 相当于 new Object(constructor)

javascript - 在 javascript 中编写反函数?

c# - 使用 lambda 函数获取列表中对象属性值的总和

Java 8 Lambda 语法更改

c++ - 按空格拆分文本

使用 `new char[size]` 进行任意数据的内存分配和释放的 C++ 安全性

c++ - c++ 中的 final 关键字是否允许额外的编译器优化?

c++ - 如何将值传递给 lambda 函数