题解 | 日志排序

#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的比较即可,我这里甚至拿了很多空格,一样可以解决,因为中间一定会出现结果

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务