根据数据成员排序或过滤对象数组
Sort or filter object arrays based on data members
是否有根据数据成员或成员函数对对象数组进行排序或过滤的标准方法?
我在下面的代码中寻找像 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;
}
要排序,您可以使用 std::sort()
and to find the minimum 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>
"Is there a standard method of sorting or filtering an array of objects based on their data members or member functions?"
c++ standard Algorithm library 提供了许多功能。即
实现您提到的功能(使用示例在参考页面中给出)。
您必须提供对您的结构成员进行操作的适当比较器 functions/classes。如果您想动态编写它们,这些甚至可以是 lambda 函数。
http://en.cppreference.com/w/cpp/algorithm/sort
对任何内容进行排序的标准方法是使用 std::sort()
并传递给它的比较函数。
std::sort(grades, grades + 10, [](Grade a, Grade b) {return a.getGrade() < b.getGrade();} );
如果您经常在对象之间进行比较,那么在 class 中实现 operator<
可能是个好主意。这样,您就不需要比较功能了。
是否有根据数据成员或成员函数对对象数组进行排序或过滤的标准方法?
我在下面的代码中寻找像 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;
}
要排序,您可以使用 std::sort()
and to find the minimum 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>
"Is there a standard method of sorting or filtering an array of objects based on their data members or member functions?"
c++ standard Algorithm library 提供了许多功能。即
实现您提到的功能(使用示例在参考页面中给出)。
您必须提供对您的结构成员进行操作的适当比较器 functions/classes。如果您想动态编写它们,这些甚至可以是 lambda 函数。
http://en.cppreference.com/w/cpp/algorithm/sort
对任何内容进行排序的标准方法是使用 std::sort()
并传递给它的比较函数。
std::sort(grades, grades + 10, [](Grade a, Grade b) {return a.getGrade() < b.getGrade();} );
如果您经常在对象之间进行比较,那么在 class 中实现 operator<
可能是个好主意。这样,您就不需要比较功能了。