题解 | 日志排序

#include <bits/stdc++.h>
using namespace std;

struct Net {
    string body;
    string timestamp; // 添加时间戳字段
    double duration; // 添加消耗时间字段

    // 自定义排序逻辑
    bool operator<(const Net &a) const {
        if (duration == a.duration) {
            return timestamp < a.timestamp; // 按时间戳从小到大排序
        }
        return duration < a.duration; // 按消耗时间从小到大排序
    }

    Net(string body, string timestamp, double duration)
        : body(body), timestamp(timestamp), duration(duration) {}
};

int main() {
    string s;
    vector<Net> ans;

    while (getline(cin, s)) {
        // 找最后一个空格
        int tag = 0;
        for (int i = s.size() - 1; i >= 0; i--) {
            if (s[i] == ' ') {
                tag = i;
                break;
            }
        }

        string c = s.substr(tag + 1); // 提取字段

        // 提取时间戳部分(从第一个空格到倒数第二个空格之间的部分)
        int first_space = s.find(' ');
        int second_last_space = s.find_last_of(' ', tag - 1);
        string timestamp = s.substr(first_space + 1, second_last_space - first_space - 1);

        // 提取消耗时间部分(最后部分去掉括号和单位)
        string duration_str = c.substr(0, c.size() - 3); // 去掉 "(s)"
        double duration = stod(duration_str);

        // 创建 Net 实例并加入向量
        Net a(s, timestamp, duration);
        ans.push_back(a);
    }

    // 按自定义逻辑排序
    sort(ans.begin(), ans.end());

    // 输出排序结果
    for (const auto &a : ans) {
        cout << a.body << endl;
    }

    return 0;
}

看似写的复杂,其实思路很简单,主要是实现一下结构体sort函数,这个问题要求是需要优先按照时间进行排序,然后按照日期进行排序,后者时间实现的方法有很多,如果同学们不会我的这个函数,可以尝试拆分成两个int,进行比较也是可以的,然后就是前面的时间的排序,这个排序的特征是长度一致,直接采用string的比较即可,我这里甚至拿了很多空格,一样可以解决,因为中间一定会出现结果

全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务