参考大神的结合自己的,刚开始最大的坑就是unordered_map的输出顺序是不一定的,和插入顺序无关,且没有rbegin(),rend()迭代器*,靠,被这个坑了半天,大神的做法就是循环取余操作,这个不得不说秒啊想起了循环队列,我靠这可比我再用一个map<int,string>记录排序先后巧妙多了,而且空间复杂度一直是n+8
#include <bits/stdc++.h>
using namespace std;
int main(int argc,char *argv[])
{
string str;
unordered_map<string,int> unmap;
vector<string> record(8,"");
int start_index=0;
string row="";
while(cin>>str>>row)
{
int len=str.size();
int j=len-1;
for(;j>=0;j--)
{
if(str[j]=='\\'||len-j==17)break;
}
string error=str.substr(j+1,len-j-1)+" "+row;
if(unmap[error]==0)
{
record[start_index]=error;
start_index=(start_index+1)%8;
}
unmap[error]++;
}
for(int i=0;i<8;i++)
{
if(record[start_index] != ""){
cout << record[start_index] << " " << unmap[record[start_index]] <<endl;
}
start_index = (start_index + 1) % 8;
}
}