#include<iostream> #include<vector> #include<unordered_map> #include<string> #include<queue> #include<utility> using namespace std; // 按照`\`分隔字符串,获得数组 vector<string> split(string str, char c){ vector<string> res; string temp; for(auto i: str){ if(i==c){ res.push_back(temp); temp.clear(); }else{ temp+=i; } } res.push_back(temp); return res; } int main(){ string str; int length; // 临时保存split结果 vector<string> vec; // 保存所有不一样的字符串 vector<string> hold; unordered_map<string, int> res; // 存入结果 queue<pair<string, int> >que; while(cin >> str >> length){ vec = split(str, '\\'); string last = vec.back(); if(last.size()>16){ last = last.substr(last.size()-16); } string ss = last + " " + to_string(length); ++res[ss]; bool flag = false; // 如果之前已有就不存 for(auto item: hold) if(item.compare(ss)==0) {flag = true; break;} if(!flag) hold.push_back(ss); } int begin=hold.size()>8?hold.size()-8:0; for(int i=begin;i<hold.size();i++) que.emplace(hold[i], res[hold[i]]); while(!que.empty()){ cout << que.front().first << " " << que.front().second << endl; que.pop(); } return 0; }
可以优化一下,其实不用queue也可以,原本用这个是想实时更新队列,后来发现不行...