Сорт:
Class:
private:
...
vector<string> words;
vector< list<int> > vints;
public:
myFunction(...)
Я вызываю сортировку в непустом списке в другой функции-члене:
void myClass::myFunction (...) {
...
if (!vints[i].empty()) vints[i].sort(sortFunc);
...
}
Моя функция сортировки:
bool myClass::sortFunc(const int& i, const int& j) { return (words[i] < words[j]); }
Ошибка:
error: no matching function for call to ‘std::list<int, std::allocator<int> >::sort(<unresolved overloaded function type>)’
/usr/include/c++/4.4/bits/list.tcc:301: note: candidates are: void std::list<_Tp, _Alloc>::sort() [with _Tp = int, _Alloc = std::allocator<int>]
/usr/include/c++/4.4/bits/list.tcc:378: note: void std::list<_Tp, _ Alloc>::sort(_StrictWeakOrdering) [with _StrictWeakOrdering = bool (SuperWordSearch::*) (const int&, const int&), _Tp = int, _Alloc = std::allocator<int>]
Я исследовал и столкнулся со следующими вопросами:
Пользовательская функция сравнения C++ для list::sort
Проблема с сортировкой списка указателей
и их было бы достаточно, если бы не тот факт, что в этом классе sortFunc зависит от переменной-члена WORDS для этого экземпляра объекта. Поэтому я не могу сделать функцию компаратора (sortFunc) статической или глобальной
РЕДАКТИРОВАТЬ: только что наткнулся на это Как отсортировать стандартное значение: список, когда вам нужны данные члена? и предлагает решение, создавая дружественный класс, но возможно ли выполнить это внутри самого определяемого пользователем класса?
bind()
? - person Kerrek SB   schedule 04.12.2011operator()
, чтобы его можно было использовать как функцию. Это называется функтор. В C++11 можно на лету создать такого зверя, как лямбду. В C++98/03 вам нужно либо определить для него класс, либо использовать стороннюю библиотеку, например Boost. Например. вы можете использоватьboost::bind
, чтобы получить указатель на вашwords
, переданный вашей реальной функции. Ура и чт., - person Cheers and hth. - Alf   schedule 04.12.2011