Почему leetcode c ++ sort () выдает ошибку компиляции? - PullRequest
0 голосов
/ 20 июня 2019

Я делаю leetcode 406. Реконструкция очереди по высоте. Сначала я хочу отсортировать вектор>, но когда я заканчиваю часть sort и 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);
        ...
    }
};

1 Ответ

1 голос
/ 20 июня 2019

std :: sort хочет функцию сравнения с этой подписью:

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

и вы передаете функцию-член , которая не совпадает. Решение: передайте лямбду, захватывая внешний мир по ссылке, если вам нужен доступ к членам класса при сравнении.

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

И, во-вторых, функция сортировки требует передачи двух векторов, она не может автоматически конвертироваться в std::pair.

...