根据数据成员对对象数组进行排序或筛选
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()
并找到最小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>
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<
可能是一个好主意。这样,您就不需要比较功能。
"是否有一种标准方法可以根据对象的数据成员或成员函数对对象数组进行排序或过滤?"
c++ 标准算法库中提供了许多函数。即
-
std::min_element
-
std::sort
-
std::remove_if
-
std::find_if
以实现您提到的功能(参考页面中给出了使用示例)。
您必须提供对结构成员进行操作的适当比较器函数/类。这些甚至可以是lambda函数,如果你想即时编写它们。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 根据数据成员对对象数组进行排序或筛选
- 具有排序和筛选逻辑的 MVC 模型