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;})因为lambda没有捕获,所以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;
}
};