c++ - 如何使用 list::sort 对对象列表进行排序?
问题描述
我必须根据他们的加班时间订购一份工人名单,所以第一个将是加班时间更长的人。我之前问过这个问题,得到的答案是将此函数与 lambda 一起使用:
class Workers {
private:
list<Worker> workers;
public:
Workers() {
}
Workers(list<Worker> workers) {
this->workers = workers;
}
void OvertimeHoursReport() {
list<Worker> workers_Copy;
workers_Copy = workers;
workers_Copy.sort([](Worker& lh, Worker& rh) { return lh.Overtimehours() > rh.Overtimehours(); });
for (list<Worker>::iterator it = workers_Copy.begin(); it != workers_Copy.end(); it++) {
if ((it)->Overtimehours() > 0) {
cout << "Name:";
cout<<(it)->getName();
cout << ' ';
cout<<(it)->getLastname();
cout << ' '<<"Sex: ";
if ((it)->getSex() == true) {
cout << "Male" << ' ';
}
if ((it)->getSexo() == false) {
cout << "female" << ' ';
}
cout << "Overtime Hours: ";
cout<<(it)->Overtimehours();
cout << endl;
}
}
}
};
它工作得很好,但我不太了解 lambdas 是如何工作的,即使在网上阅读了它们之后也是如此。有没有办法做同样的事情,但使用列表的排序算法或任何其他方法?
解决方案
它工作得很好,但我不太了解 lambdas 是如何工作的,即使在网上阅读了它们之后也是如此。有没有办法做同样的事情,但使用列表的排序算法或任何其他方法?
您正在使用 的sort
成员函数std::list
。有两个重载std::list::sort
。
void sort();
template< class Compare >
void sort( Compare comp );
在您的情况下,您正在使用第二个重载。它允许自定义比较函数对列表中的项目进行排序。使用lambda
函数是提供自定义比较函数的一种方式。您可以使用其他方式提供自定义比较功能,例如:
非成员函数。
bool compareWorkers(Worker const& lh, Worker const& rh) { return (lh.Overtimehours() > rh.Overtimehours()); }
并将其用作:
workers_Copy.sort(compareWorkers);
中的
static
成员函数Workers
。static bool compare(Worker const& lh, Worker const& rh) { return (lh.Overtimehours() > rh.Overtimehours()); }
并将其用作:
workers_Copy.sort(Workers::compare);
一个函子类。
struct CompareWorkers { bool operator()(Worker const& lh, Worker const& rh) const { return (lh.Overtimehours() > rh.Overtimehours()); } };
并将其用作:
workers_Copy.sort(CompareWorkers());
推荐阅读
- php - 如何将sql数据库中的多行显示到基于相同外键的复选框中
- php - 如何将foreach保存到laravel中的变量?
- ios - 如何在使用移动视觉人脸检测器时点击 UIView 进行捕捉
- html - 在引导程序 4 中创建三个居中的网格
- css - 如何向此 div 添加过渡
- maven - 如何使用 Maven 启动多个 spring-boot 应用程序,例如端口 8081 上的客户端和端口 8080 上的 API
- sql - 使用分组在 Django 中进行条件批量更新
- c# - 计算我的应用程序中当前存在的活动任务/线程的数量
- javascript - 统计 gtm.click 的出现次数
- react-native - 反应原生 fs iOS 不显示文档目录中的文件