Wol*_*ian 2 c++ sorting stl c++11
我有一个列表,其中包含用多个参数定义的对象Studenti.我想对这个学生名单进行排序,首先是他们的平均值,如果手段是相同的,我按字母顺序排序.
在我的班级学生中我声明了这个头部功能:
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_);
}
Run Code Online (Sandbox Code Playgroud)
medie_
是Studenti的双重私人成员,是Studenti
nume_
的std :: string私人成员
主要是我有一个Studenti列表:
std::list<Studenti> listaStud_ = {stud1, stud2, stud3, stud4, stud5};
功能调用:
std::sort(listaStud_.begin(), listaStud_.end(), mediaDescrescator);
我的错误是:mediaDescrescator未在此范围内声明.
我已经看到了关于这种类型的其他主题,它们被宣布为我的,我尝试使用矢量类型而不是列表.
mediaDescrescator
调用without(),因为它必须作为函数指针或函数对象传递.
mediaDescrescator
是...的成员函数Studenti
.它是根据类的词法范围定义的.所以你可以访问Studenti::mediaDescrescator
,但不是mediaDescrescator
.mediaDescrescator
全局命名空间中没有命名的函数.
此外,为了避免您可能遇到的下一个错误,请确保它是一个static
成员函数.毕竟,您不需要有效的实例来调用它.它不访问任何成员变量this
.
std::tie
返回一个std::tuple
引用.
std::tuple
定义执行正确的词典比较的比较运算符.
因此,所有你需要做的是把Studenti
成tuple
与tie
-然后比较的元组.
bool Studenti::mediaDescrescator(const Studenti& a, const Studenti& b)
{
return std::tie(a.medie_, a.nume_) > std::tie(b.medie_, b.nume_);
}
Run Code Online (Sandbox Code Playgroud)
您可能会发现提供一个as_tuple()
在您编写的类上调用的方法很有用:
struct Studenti
{
// rest of class
auto as_tuple() const { return std::tie(medie_, nume_); }
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
271 次 |
最近记录: |