функция сравнения классов сортировки stl - PullRequest
0 голосов
/ 21 марта 2012

Я бы хотел использовать сортировку stl с функцией сравнения классов greater, которая использует infoVec1 и infoVec2, но я получаю ошибку компиляции:

Вот заголовок класса

class Compare{
    Compare();
    std::vector< std::vector<std::string> >& infoVec1;
    std::vector< std::vector<std::string> >& infoVec2;


    public:

    bool greater(int one, int two);

    Compare(std::vector< std::vector<std::string> >& info1,
    std::vector< std::vector<std::string> >& info2);
};

Я инициализировал сравнение в основном так:

Compare C = Compare(info1, info2);

И я пытаюсь использовать в основном как:

sort(vec.begin(), vec.end(), C.greater);

И я получаю эту ошибку:

main.cpp:266: error: no matching function for call to ‘sort(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, <unresolved overloaded function type>)’
/usr/include/c++/4.2.1/bits/stl_algo.h:2852: note: candidates are: void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, _Compare = bool (Compare::*)(int, int)]
make: *** [main.o] Error 1

Как я могу исправить этот класс, чтобы greater работал с сортировкой stl?

1 Ответ

1 голос
/ 21 марта 2012

Легче изменить метод большее () на operator () ().

class Compare{
    Compare();
    std::vector< std::vector<std::string> >& infoVec1;
    std::vector< std::vector<std::string> >& infoVec2;


    public:

    bool operator()(int one, int two) const;  // this is used automatically.

    Compare(std::vector< std::vector<std::string> >& info1,
    std::vector< std::vector<std::string> >& info2);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...