基于数据成员对对象数组进行排序或过滤

Pil*_*pel 2 c++ sorting minimum

是否有基于数据成员或成员函数对对象数组进行排序或过滤的标准方法?

我正在寻找一个标准函数,如getLowestValue下面的代码:

class Grade
{
public:
    Grade() : _grade(0) {}

    void setGrade(int i) { _grade = i; }
    int getGrade() const { return _grade; }

private:
    int _grade;
}

int main()
{
    Grade grades[10];

    for(int i = 0; i < 10; i++)
        grades[i].setGrade(generateRandomNumber());

    Grade *lowestGrade = getLowestValue(grades, Grade::getGrade); //???

    std::cout << "lowest grade: " << lowestGrade->getGrade() << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Jér*_*ucq 7

要排序,您可以使用std::sort()和找到最小值std::min_element().

在这两种情况下,您都可以实现operator<或创建比较函数.

例子 operator<

inline bool operator< (const Grade& left, const Grade& right){ 
    return left.getGrade() < right.getGrade();
}
Run Code Online (Sandbox Code Playgroud)

用法std::min_element():

Grade result = *std::min_element(std::begin(grades), std::end(grades));
Run Code Online (Sandbox Code Playgroud)

用法std::sort():

std::sort(std::begin(grades), std::end(grades));
Run Code Online (Sandbox Code Playgroud)

你必须包括: #include <algorithm>