好的,我有一个对象列表,我想按我创建的布尔函数对列表进行排序。
功能->
bool funct(Student &s1,Student &s2)
{
return s1.calculMedie()<s2.calculMedie();
}
我得到了这个清单:
list<Student*> list;
list.push_back(sx[0]);
list.push_back(sx[1]);
list.push_back(sx[2]);
sx来自此声明-> Student **sx=new Student*[3];
我创建了3类学生类型的对象。
我想通过'calculMedie()'对它们进行排序,这是一个返回其平均成绩的函数。
double Student::calculMedie()
{
int nr=0;
double s=0;
for(auto i : note)
{
nr++;
s=s+i;
}
return s/nr;}
^就是这样。
当我尝试执行list.sort(list.begin(),list.end(),funct)
时,我得到此错误:“从类型'Class'的表达式对引用类型'Class&'的无效初始化”
答案 0 :(得分:0)
似乎您将std::sort
算法与list<T>::sort
方法混合在一起。只能使用列表的sort
方法对列表进行排序。
list::sort
有两个重载:
void sort();
template< class Compare >
void sort( Compare comp ); // [2]
如果要按比较器排序,请编写如下:
list<Student*> list;
list.sort (funct);
因为列表存储指向Student
的指针,所以您需要修改funct函数的签名,它必须使用指针而不是引用:
bool funct(Student* s1,Student* s2)
{
return s1->calculMedie()<s2->calculMedie();
}
优良作法是将s1,s2作为指向 const 对象的指针,当您将s1,s2更改为const Student* s1, const Student* s2
时,还需要将calculMedie
设置为 const 成员函数。