C++: priority_queue:模板参数中的 lambda 表达式

c++: priority_queue: lambda-expression in template-argument

本文关键字:表达式 参数 lambda priority queue C++      更新时间:2023-10-16

我正在尝试创建一个priority_queue,每个元素作为 3D 矢量。其第三维具有最大值的元素将成为优先级元素。

这是我的代码:

priority_queue< vector<int>, vector<vector<int>>, [](vector<int> &v1, vector<int> &v2){
return v1[2] > v2[2];
}> pq{};

但我收到以下错误:

error: lambda-expression in template-argument

知道我做错了什么吗?谢谢!

类型模板声明中不能有 lambda(这是一个对象((其中需要类型。改为:

auto lambda =  [](vector<int> &v1, vector<int> &v2){
return v1[2] > v2[2];
};
priority_queue< vector<int>, vector<vector<int>>,decltype(lambda)> pq{lambda};

我们还需要传递lambda,因为它不是默认可构造的。

表格C++20起,我们可以执行以下操作:

priority_queue< vector<int>, vector<vector<int>>,decltype([](vector<int> &v1, vector<int> &v2){
return v1[2] > v2[2];
};
)> pq{};

这里有两个新的lambda特征发挥作用。首先,您可以直接获取它的类型(形式上:在 C++17 中,您不能在未计算的上下文中使用 lambda 表达式(,其次,lambda 是默认可构造的。但现在,这还是不可能的。