我刚刚编写了一个程序,其中程序按时间(分钟)对人进行排序。但是,如果分钟数相同并且我也需要对秒进行排序,那么我应该在什么地方添加代码?
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
struct people{
string name;
int min;
int sec;
};
bool comp(const people &p1, const people &p2) {return (p1.min < p2.min); }
int main() {
int temp;
people z[6];
for (int i = 0; i < 6; i++) {
cin >> z[i].name;
cin >> z[i].min;
cin >> z[i].sec;
}
sort(z, z + 6, comp);
cout << endl;
for (int i = 0; i < 6; i++) {
cout << z[i].name << " " << z[i].min << " " << z[i].sec << endl;
}
return 0;
}
/*
input for example:
John 19 15
Liza 9 59
Michael 19 45
Kira 2 37
Thomas 5 41
Justas 19 24
*/
答案 0 :(得分:2)
拥有正确比较功能的一种简单方法是使用operator <
中的std::tuple
:
bool comp(const people &lhs, const people &rhs)
{
return std::tie(lhs.min, lhs.sec) < std::tie(rhs.min, rhs.sec);
}
答案 1 :(得分:1)
只需在p1.min==p2.min
bool comp(const people &p1, const people &p2) {
return (p1.min < p2.min || p1.min == p2.min && p1.sec < p2.sec); }
答案 2 :(得分:0)
@ Jarod42和@doug的答案肯定会起作用,但是我认为此解决方案更具可读性。
int getSeconds(const people &p){
const min2sec = 60.0;
return p.min * min2sec + p.sec;
}
bool comp(const people &p1, const people &p2) {
return (getSeconds(p1) < getSeconds(p2));
}
@doug的解决方案可能会产生性能优势,因为您首先比较分钟,只有当它们不相等时才看秒。
如果事实证明性能是一个问题(并且测量证明这是您的热点),则可以对此进行优化。请记住,该操作的数据结构包含多余的数据(string name;
),这可能会由于缓存行阻塞而破坏您的性能。