我有一个列表,其中包含用多个参数定义的对象 Studenti。 我想对这个学生列表进行排序,首先按他们的均值排序,如果均值相同,我将按字母顺序排序。
在我的 Student 类,我声明了这个头函数:
bool mediaDescrescator(const&, const&);
这是通过这种方式实现的:
bool Studenti::mediaDescrescator(const Studenti& a, const Studenti& b)
{
if(a.medie_ != b.medie_)
{
return (a.medie_ > b.medie_);
}
return (a.nume_ > b.nume_);
}
medie_
是 Studenti 的双重私有(private)成员
nume_
是 Studenti 的 std::string 私有(private)成员
在 main 中,我有一个 Studenti 列表:
std::list<Studenti> listaStud_ = {stud1, stud2, stud3, stud4, stud5};
函数调用:
std::sort(listaStud_.begin(), listaStud_.end(), mediaDescrescator);
我的错误是:mediaDescrescator 未在此范围内声明。
我看过其他关于此类排序的主题,它们的声明方式与我的类似,我什至尝试使用 vector 类型而不是列表。
mediaDescrescator
调用时不带(),因为它必须作为函数指针或函数对象传递。
最佳答案
mediaDescrescator
是 Studenti
的成员函数。它是在类的词法范围内定义的。因此您可以访问 Studenti::mediaDescrescator
,但不能访问 mediaDescrescator
。全局命名空间中没有名为 mediaDescrescator
的函数。
此外,为了避免您可能遇到的下一个错误,请确保它是一个static
成员函数。毕竟,您不需要有效的实例来调用它。它不访问 this
的任何成员变量。
关于c++ - STL 按多个参数排序 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159407/