Как отсортировать вектор члена класса? - PullRequest
0 голосов
/ 17 июня 2019

Я работаю в коде, который сортирует список с ключом для каждого элемента, и я использую функцию сортировки STL.Однако ключевая функция, которая мне нужна, должна быть нестатической функцией класса, и компилятор отказывается принимать эту функцию.Любые предложения приветствуются.

#include <bits/stdc++.h>

class Class {
    public:
        Class (int i): my_int(i) {}
        int f (int x) { return x % my_int; }
        bool key (int i1, int i2) { return f(i1) < f(i2); }
        void sort_v () { std::sort(v.begin(), v.end(), this->key) }
    private:
        std::vector<int> v = {4,6,3,2};
        int my_int;
};

int main() {
    Class c(3);
    c.sort_v();
    return 0;
}

Примечание. Друга функция не может быть легко реализована, потому что аргументы key (int, int) передаются автоматически, а так как f не является статическим, у нас не будет никакого способапередать данные этого класса.

Ответы [ 2 ]

3 голосов
/ 17 июня 2019

Просто используйте лямбду:

void sort_v () {
    std::sort(v.begin(), v.end(), [this](auto a, auto b) { return key(a, b); });
}
0 голосов
/ 17 июня 2019

Вы можете использовать std::bind:

void sort_v () { 
    using std::placeholders;
    std::sort(v.begin(), v.end(), std::bind( &Class:key, this, _1, _2 ) ); 
}

или используйте лямбду:

void sort_v () { 
    std::sort(v.begin(), v.end(), [this]( int x, int y ) { return key( x, y ); ); 
}

чтобы ваш метод работал.

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