2012-03-21 3 views
0

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

Вот класс Header

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 будет работать с СТЛ рода?

+0

Какой тип 'vec'? – Cameron

+0

Функция сравнения должна быть автономной функцией или функциональным объектом. –

+0

vec имеет тип std :: vector HighLife

ответ

1

Его легче изменить метод large() в 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); 
}; 
Смежные вопросы