c++: priority_queue 结构和 decltype 比较器

c++: priority_queue of struct and decltype comparator

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;
    }
};

但出现错误:

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

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 开始,您还可以使用 class 模板参数推导来避免两次命名 lambda 和值类型:

priority_queue pq1{lambda1, vector<tree>};