C++如何实现Task结构体对象集合按urgency字段值排序
C++任务列表按urgency排序实现方法
你可以直接使用C++ STL提供的排序工具实现需求,具体操作步骤如下:
- 引入排序依赖头文件
在代码的头文件引入部分新增一行:
#include <algorithm>
- 修改Task结构体的getUrgency方法
给方法加上const修饰,保证常量对象可以正常调用该方法:
int getUrgency() const { urgency = ceil(deadline - estimated); return urgency; }
- 实现排序逻辑
你可以选择两种写法实现排序:
- 写法一:单独定义比较函数
先在全局范围定义任务比较规则:
// 按urgency升序排序,需要降序的话把 < 改成 > 即可 bool compareTask(const Task& a, const Task& b) { return a.getUrgency() < b.getUrgency(); }
之后在main函数的printAll调用前,给存储任务的vector排序:
std::sort(p.begin(), p.end(), compareTask);
如果要给你代码中声明的list容器排序,因为list不支持随机访问,要用list自带的sort方法:
// 先把vector的元素导入list taskList.assign(p.begin(), p.end()); // 调用list自带的排序方法 taskList.sort(compareTask);
- 写法二:使用lambda表达式(无需单独定义比较函数,更简洁)
直接在main函数需要排序的位置写如下代码即可:
// 给vector排序 std::sort(p.begin(), p.end(), [](const Task& a, const Task& b) { return a.getUrgency() < b.getUrgency(); }); // 如果是给list排序就用下面的代码 // taskList.assign(p.begin(), p.end()); // taskList.sort([](const Task& a, const Task& b) { return a.getUrgency() < b.getUrgency(); });
修改完成后再调用printAll,输出的就是按urgency排序后的任务列表。
内容的提问来源于stack exchange,提问作者athanasia
相关产品推荐
相关产品推荐

