class Solution {
struct tree{
int x;
int y;
int height;
};
public:
int cutOffTree(vector<vector<int>>& forest) {
auto lambda1 = [](tree &t1, tree &t2){return t1.height < t2.height;};
priority_queue<tree, vector<tree>, decltype(lambda1)> pq1;
return 0;
}
};
但出现错误:
知道我做错了什么吗?谢谢!
答案 0 :(得分:4)
priority_queue
需要一个Compare
类型的实例用于比较。
priority_queue
的默认构造函数尝试将实例构造为Compare()
。由于Compare
是一种关闭类型,由于关闭类型无法默认构造,因此它将失败。
您需要将实例提供给构造函数。它将保存一份副本供以后使用:
priority_queue<tree, vector<tree>, decltype(lambda1)> pq1{lambda1};
就目前而言,在C ++ 20中,对于没有捕获的lambda(例如此处),这将不再是必需的,因为它们将被默认构造。您可以使用例如在编译器中的实验性C ++ 20支持来进行尝试。 -std=c++2a
或/std:c++latest
标志添加到您的编译器。
自C ++ 17起,您还可以使用类模板参数推导来避免两次命名lambda和值类型:
priority_queue pq1{lambda1, vector<tree>};