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 是默认可构造的。但现在,这还是不可能的。
相关文章:
- 概念中的cv限定符需要表达式参数列表
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 使用自动推导的 lambda 参数作为常量表达式
- 编译器是否强制根据模板参数计算表达式?
- 错误:参数中无效地使用了无效表达式
- 将折叠表达式传递给可变参数模板
- 为什么带有指针子对象的文字类类型的 constexpr 表达式不能是非类型模板参数
- C++: priority_queue:模板参数中的 lambda 表达式
- 容器如何处理 lambda 表达式的参数
- 在C++ Lambda 表达式中,为什么人们更喜欢按值捕获而不是作为参数传递?
- 整体模板参数。错误:在常量表达式中使用'this'
- 我可以std::在fold表达式中转发参数吗
- 折叠表达式模板参数推导/替换失败
- 折叠表达式和参数包:static_assert 内 Args&& 和 Args 之间的区别
- C++:从捕获函数参数的函数返回 lambda 表达式
- 是否可以使用带有模板化参数的特征块表达式作为左值?
- 编译器在传递 const 变量时返回错误:模板参数不是常量表达式
- 表达式参数在 C++ 中有什么用
- 类表达式参数定义不正确