STL-сортировка не работает должным образом - PullRequest
2 голосов
/ 09 декабря 2011

Мне кажется, что я использую это правильно, но компилятор чувствует себя иначе.Я пытаюсь отсортировать список курсов в алфавитном порядке в моей функции sort_by_name, используя алгоритм сортировки stl.Это примерно то, что я написал:

class SomeClass {
  private:
    struct course {
        string id, name;
    };
    vector<course> COURSES;
    bool nameCmp(course a, course b) {return (a.name > b.name) ? true : false;}
  public:
    void sort_by_name() {
        sort(COURSES.begin(), COURSES.end(), nameCmp);
    }
};

Ошибка:

error: no matching function for call to ‘sort(std::vector<SomeClass::course>::iterator, std::vector<SomeClass::course>::iterator, <unresolved overloaded function type>)’

Заранее благодарен за любую помощь.

Ответы [ 3 ]

8 голосов
/ 09 декабря 2011

Измените функцию следующим образом:

static bool nameCmp(course a, course b) { return a.name > b.name; }

Еще лучше было бы передать аргументы с помощью const-reference, course const & a и т. Д.

2 голосов
/ 09 декабря 2011
     bool SomeClass::nameCmp(course a, course b) {return (a.name > b.name) ? true : false;}

Имеет неявный параметр SomeClass *this.Сделайте метод вне класса, переместив объявление или сделав его static.

0 голосов
/ 09 декабря 2011

Алгоритм sort не будет вызывать функцию nameCmp из объекта или по отношению к классу, он будет вызывать ее из глобального пространства имен.Вам нужно сделать его свободной функцией или сделать статичным и использовать SomeClass::nameCmp.

...