Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用函子代替lambda函数_C++_Priority Queue_Functor - Fatal编程技术网

C++ 如何使用函子代替lambda函数

C++ 如何使用函子代替lambda函数,c++,priority-queue,functor,C++,Priority Queue,Functor,我试图从Leetcode解决一个问题 问题描述: 给定一个nxn矩阵,其中每一行和每一列都按升序排序,找出矩阵中的第k个最小元素 请注意,它是排序顺序中的第k个最小元素,而不是第k个独立元素 我是这样解决的: 类解决方案{ 公众: int-kthSmallest(标准::向量和矩阵,int-k){ 自动补偿gt=[&矩阵](标准::对a,标准::对b) { 返回矩阵[a.first][a.second]>矩阵[b.first][b.second]; }; m=矩阵大小(); 如果(m==0)返回

我试图从Leetcode解决一个问题

问题描述:

给定一个nxn矩阵,其中每一行和每一列都按升序排序,找出矩阵中的第k个最小元素

请注意,它是排序顺序中的第k个最小元素,而不是第k个独立元素

我是这样解决的:

类解决方案{
公众:
int-kthSmallest(标准::向量和矩阵,int-k){
自动补偿gt=[&矩阵](标准::对a,标准::对b)
{
返回矩阵[a.first][a.second]>矩阵[b.first][b.second];
};
m=矩阵大小();
如果(m==0)返回0;
n=矩阵[0]。大小();
如果(n==0)返回0;
std::优先级队列最小堆(comp\u gt);
对于(int j=0;j
这个代码有效。但是,当我试图用一个函子替换lambda函数时,我编写了如下函子:

class comp\u gt
{
布尔运算符()(标准::对a,标准::对b,标准::向量和矩阵)
{
返回矩阵[a.first][a.second]>矩阵[b.first][b.second];
}
};
然后我意识到我不知道如何在lambda函数中将
矩阵
传递给类似
[&matrix]
的函子


有人能帮忙吗?

您需要在函子的构造函数中传递引用。请注意,下面的代码相当于lambda,但带有
mutable
修饰符

class comp_gt
{

    public:
        using Matrix = std::vector<std::vector<int>>;

        comp_gt(Matrix& matrix) : matrix{matrix}{}
        bool operator () (std::pair<int, int> a, std::pair<int, int> b, std::vector<std::vector<int>>& matrix)
        {
             return matrix[a.first][a.second] > matrix[b.first][b.second];
        }

    private:

        Matrix& matrix;

};

“如何使用函子而不是lambda函数”-使用
操作符()
创建一个类(可以选择捕获变量)。lambda只不过是编写此类(函子)类的语法糖(更简单的方法)。

这是通过将其传递给比较器的构造函数来完成的:

class comp_gt
{
  std::vector<std::vector<int>>& matrix;

  comp_gt(std::vector<std::vector<int>>& matrix) : matrix{matrix} {}
将此比较器与
std::priority_queue
一起使用类似

class comp_gt
{
  std::vector<std::vector<int>>& matrix;

  comp_gt(std::vector<std::vector<int>>& matrix) : matrix{matrix} {}
comp_gt comparator{some_matrix};

std::sort(something.begin(), something.end(), comparator);