компаратор в сортировке cpp - PullRequest
0 голосов
/ 18 октября 2019

Я новичок в cpp. Я только что увидел новый способ написания компаратора для сортировки с использованием этого [], так что толку это здесь, потому что когда я определял компаратор обычным способом, я получал ошибку, подобную этой

Редактировать: ошибка

/code/Solution.cpp:22:52: error: invalid use of non-static member function sort(intervals.begin(),intervals.end(),comp);

bool comp(vector<int>&v1, vector<int>&v2) {
return v1[1] < v2[1];
}

Оригинальный и законный способ здесь

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(), intervals.end(), [](auto &a, auto &b) {
            return a[1] < b[1];
        });
        int prev = INT_MIN;
        int ans = 0;
        for (auto &it : intervals) {
            if (it[0] >= prev) {
                prev = it[1];
            }
            else
                ++ans;
        }
        return ans;
    }
};

1 Ответ

0 голосов
/ 18 октября 2019

[] - это начало того, что в C ++ называется lambda.

Вы можете прочитать хорошо написанный ответ о том, какие лямбды здесь:

Чтотакое лямбда-выражение в C ++ 11?

Кроме того, вы не предоставили свой исходный код, поэтому я не могу указать на ошибку. Но из сообщения об ошибке кажется, что созданная вами функция comp была внутри класса. Один из способов - сделать функцию глобальной, после чего вы сможете легко ее передать. Другой вариант - сделать функцию статичной (что, я считаю, имеет смысл). Затем вы можете передать его в следующем виде: sort(a.begin(), a.end(), A::comp) где A - класс, в котором вы создали эту функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...