Как передать параметр в функцию сравнения сортировки? - PullRequest
2 голосов
/ 30 марта 2020

Я хочу отсортировать вектор v, используя

std::sort(v.begin(),v.end(),cmpr);

, где моя функция cmpr равна

bool cmpr(int a,int b, int c) 
{
     return a%c <= b%c;
}

Теперь я хочу знать, как я могу передать c?

1 Ответ

3 голосов
/ 30 марта 2020

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

#include <algorithm>
#include <iostream>

auto make_cmpr(int c)
{
    return [c](int a, int b) {
        return a%c <= b%c;
    };
}

int main()
{
    int a[5] = {2, 4, 1, 3, 5};
    std::sort(a, a + 5, make_cmpr(3));

    /* or directly
    int c = 3;
    std::sort(a, a + 5, 
        [c](int a, int b) {
            return a%c <= b%c;
        }
    );
    */

    for (int e : a) std::cout << e << ' ';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...