c++: priority_queue: 模板参数中的 lambda 表达式
c++: priority_queue: lambda-expression in template-argument
我正在尝试创建一个 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 是默认可构造的。但现在,这还不可能。
我正在尝试创建一个 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 是默认可构造的。但现在,这还不可能。