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

时间:2015-04-19 15:34:07

标签: 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;
}

3 个答案:

答案 0 :(得分:7)

要排序,您可以使用std::sort()并找到最低std::min_element()

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

operator<

的示例
inline bool operator< (const Grade& left, const Grade& right){ 
    return left.getGrade() < right.getGrade();
}

std::min_element()的用法:

Grade result = *std::min_element(std::begin(grades), std::end(grades));

std::sort()的用法:

std::sort(std::begin(grades), std::end(grades));

您必须包含:#include <algorithm>

答案 1 :(得分:1)

http://en.cppreference.com/w/cpp/algorithm/sort

对任何事物进行排序的标准方法是使用传递给它的比较函数std::sort()

std::sort(grades, grades + 10, [](Grade a, Grade b) {return a.getGrade() < b.getGrade();} );

如果对象之间的比较是您经常做的事情,那么在您的班级中实施operator<可能是个好主意。这样,您就不需要比较功能了。

答案 2 :(得分:0)

  

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

c++ standard Algorithm library提供了许多功能。即

实现您提到的功能(使用示例在参考页面中给出)。

您必须提供适合您的结构成员的比较器函数/类。如果你想在运行中编写它们,它们甚至可以是lambda函数。