c++ - STL 按多个参数排序 C++

标签 c++ sorting c++11 stl

我有一个列表,其中包含用多个参数定义的对象 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调用时不带(),因为它必须作为函数指针或函数对象传递。

最佳答案

mediaDescrescatorStudenti 的成员函数。它是在类的词法范围内定义的。因此您可以访问 Studenti::mediaDescrescator,但不能访问 mediaDescrescator。全局命名空间中没有名为 mediaDescrescator 的函数。

此外,为了避免您可能遇到的下一个错误,请确保它是一个static 成员函数。毕竟,您不需要有效的实例来调用它。它不访问 this 的任何成员变量。

关于c++ - STL 按多个参数排序 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47159407/

相关文章:

c++ - 数组成员的默认复制赋值

Matlab求向量中重复元素的间隔

c - 结构、指针和改变它们

c# - .NET List<T>.Sort 使用 introsort,为什么最坏的情况是 O(n^2)?

c++ - 如何区分使用内存池分配的类

c++ - C++11 中引入了哪些重大变化?

C++ - 修改文件而不创建新文件

c++ - 以编程方式设置标题栏和边框颜色

c++ - 带有 C++14 的 Intel Pin

c++ - 我将如何着手将物理学应用于带有子弹的玩家?