题解 | #日志排序# 带注释版
日志排序
https://www.nowcoder.com/practice/0f64518fea254c0187ccf0ea05019672
#include <bits/stdc++.h> using namespace std; // 定义一个结构体用来存储记录信息 struct record { string name; // 记录中的人名 string startDay; // 开始日期 string startTime; // 开始时间 double costTime; // 持续时间,以某种单位(可能是小时)表示 string line; // 原始输入字符串 }; // 比较函数,用于确定两个记录的排序规则 bool cmp(record r1, record r2) { // 首先比较持续时间 if (r1.costTime != r2.costTime) return r1.costTime < r2.costTime; else { // 如果持续时间相同,则比较开始日期 if (r1.startDay != r2.startDay) return r1.startDay < r2.startDay; // 如果开始日期也相同,则比较开始时间 else return r1.startTime < r2.startTime; } } int main() { record r[10000]; // 声明一个记录数组,用来存储最多10000条记录 int i = 0; string s; // 循环读取输入直到EOF while (getline(cin, s)) { r[i].line = s; // 将整行文本存储在line字段中 istringstream lineStream(s); // 使用istringstream从字符串中提取数据 // 将提取的数据存储到相应的字段 lineStream >> r[i].name >> r[i].startDay >> r[i].startTime >> r[i].costTime; i++; } // 对记录数组进行排序,根据定义的比较函数 sort(r, r + i, cmp); // 输出排序后的每条记录的原始行 for (int j = 0; j < i; j++) { cout << r[j].line << endl; } }#算法#