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

C++ c+中比较函数的Lambda+;不起作用,c++,lambda,C++,Lambda,此代码生成一个错误: priority_queue<int, vector<int>, [](int a, int b)->bool{return a>b;}> q; 您需要指定类型,而不是lambda表达式本身作为模板参数。和lambda应指定为构造函数参数 例如 autoc=[](inta,intb)->bool{returna>b;};//提前申报lambda 优先级队列q(c); //^^^^^^^您可以使用std::function而不是lambd

此代码生成一个错误:

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

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

例如

autoc=[](inta,intb)->bool{returna>b;};//提前申报lambda
优先级队列q(c);

//^^^^^^^您可以使用std::function而不是lambda

auto q = std::priority_queue<int, std::vector<int>, std::function<bool(const int&, const int&)>>{
            [](const int& a, const int& b)
            {
                return a < b;
            }
    };
auto q=std::priority\u队列{
[](常量内部和a、常量内部和b)
{
返回a
您遇到了什么错误?如果您添加准确的错误,而不仅仅是“我遇到了一个错误”,这将更有帮助。使用普通函数指针如何<代码>优先级_队列q([](inta,intb){返回a>b;})std::function
有一些开销。
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
auto q = std::priority_queue<int, std::vector<int>, std::function<bool(const int&, const int&)>>{
            [](const int& a, const int& b)
            {
                return a < b;
            }
    };