题解 | #简单错误记录#

简单错误记录

https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb

#include <algorithm>
#include <iostream>
#include <map>
#include <sstream>
#include <vector>
using namespace std;

struct key {
    string filename;
    int line;
    key(string filename, int line) : filename(filename), line(line) {}
    bool operator<(const struct key& g)const {
        return (filename < g.filename) || (filename == g.filename && line < g.line);
    }

};
// typedef struct key key;
using key = struct key;
int main() {
    string input, filename;
    int line;
    map<key, int> mp;
    vector<key> vk;
    while (cin >> input >> line) {
        istringstream iss(input);
        size_t n_pos = input.find_last_of('\\'); //注意这个斜杠应该是双斜杠
        if (n_pos == string::npos) cout << "error" << endl;
        filename = input.substr(n_pos + 1, input.size() - n_pos); //文件名
        if (filename.size() > 16) filename = filename.substr(filename.size() - 16, 16);
        key k(filename, line);
        if (mp.find(k) != mp.end()) { //如果找到了,引用计数加1
            mp[k]++;
        } else {
            vk.push_back(k); //没找到则记录出现次数
            mp[k] = 1;
        }
        // cout << line << endl;
    }
    if (vk.size() > 8) {
        for (int i = vk.size() - 8; i < vk.size(); ++i) {
            cout << vk[i].filename << " " << vk[i].line << " " << mp[vk[i]] << endl;
        }
    } else {
        for (int i = 0; i < vk.size(); ++i) {
            cout << vk[i].filename << " " << vk[i].line << " " << mp[vk[i]] << endl;
        }
    }
    return 0;
}
// 64 位输出请用 printf("%lld")

主要是如何让map的键拥有两个值,定义了一个结构体,还要重载操作符

全部评论

相关推荐

mjasjon:这种trash中厂 简历过筛概率比大厂还低(除阿里系)
投递哔哩哔哩等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务