STL-Sort无法按预期工作

时间:2011-12-08 21:29:46

标签: c++ stl stl-algorithm

我觉得好像我正确使用它,但编译器感觉不然。我正在尝试使用stl排序算法在sort_by_name函数中按字母顺序对课程列表进行排序。这大致是我写的:

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 个答案:

答案 0 :(得分:8)

将功能更改为:

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

更好的方法是通过const-reference,course const & a等传递参数。

答案 1 :(得分:2)

     bool SomeClass::nameCmp(course a, course b) {return (a.name > b.name) ? true : false;}

具有隐式SomeClass *this参数。通过移动声明或使其成为static来使类外的方法。

答案 2 :(得分:-1)

sort算法不会从一个对象或与该类相关的函数调用nameCmp函数,而是从全局命名空间调用它。您需要将其设为自由函数,或将其设为静态函数并使用SomeClass::nameCmp