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 次 |
| 最近记录: |