我正在编写一个GradeBook类,其中包含指向StudentInfo类对象std::vector <StudentInfo*> students;
的指针向量,我想使用<algorithm>
排序函数对其进行排序,并通过其字符串数据评估每个对象会员学生ID。从堆栈溢出的其他帖子,我觉得我得到了我需要做的主旨
首先,我重载了运算符&lt;在StudentInfo中:
bool StudentInfo::operator<(const StudentInfo & right) const
{
return (this->getStudentID() < right.getStudentID());
}
这似乎工作正常 然后我在GradeBook课程中定义了一个比较函数:
bool GradeBook::CompareStudents(const StudentInfo* left, const StudentInfo* right) const
{
return (*left < *right);
}
当我独立尝试时,这似乎工作得很好 似乎引发我的是当我尝试使用带有CompareStudents函数的sort函数作为第三个参数时告诉它如何比较指向对象的指针(使用StudentID数据成员)。
sort(students.begin(), students.end(), CompareStudents);
我在堆栈溢出和其他地方发现了几个看起来相似的例子,但我一定做错了,因为我一直有错误:
1) 'GradeBook::CompareStudents': non-standard syntax; use '&' to create a pointer to member
2) 'sort': no matching overloaded function found
3) 'void std::sort(_RanIt,_RanIt)': expects 2 arguments - 3 provided
如果我放弃了CompareStudents部分而只是写sort(students.begin(), students.end())
它运行正常,但只是比较那些不是我想要的行为的指针。
我正在运行Visual Studio Community 2015,如果这很重要的话。如果这令人困惑,我可以发布我的整个.h和.cpp文件。