为什么 leetcode c++ sort() 给出编译错误

Why leetcode c++ sort() gives Compile Error?

本文关键字:编译 错误 leetcode c++ sort 为什么      更新时间:2023-10-16

我正在做leetcode 406。按高度重建队列。我想先对向量进行排序>但是当我完成排序和 cmp 部分并运行代码时,它给了我编译错误。

solution.cpp: In member function reconstructQueue
Line 12: Char 47: error: invalid use of non-static member function 'bool Solution::cmp(std::pair<int, int>, std::pair<int, int>)'
         sort(people.begin(), people.end(), cmp);
                                               ^

我应该怎么做才能让它工作?

class Solution {
public:
    bool cmp(pair<int,int> a, pair<int, int> b)
    {
        if(a.first!=b.first) return a.first < b.first;
        else return a.second > b.second;
    }
    vector<vector<int>> reconstructQueue(vector<vector<int>>& people) {
        vector<vector<int>> rlt(people.size());
        sort(people.begin(), people.end(), cmp);
        ...
    }
};

std::sort 想要一个具有此签名的比较函数:

bool cmp(const Type1 &a, const Type2 &b);

并且您正在传递一个不同的成员函数。解决方案:传递一个 lambda,如果您在比较时需要访问类的成员,则通过引用捕获外部世界。

sort(...,[&](const vector<int>& v1,const vector<int>& v2) -> bool { ... });

其次,排序函数需要传递两个向量,它不能自动转换为std::pair