这个题可能是我找回状态的前奏,个人感觉。
由于BFS至今不懂,推到了数组不懂,再往上推,还是对数据存储的结构不能烂熟于兄,所以会针对数组,栈,队列,链表等初等存储结构上下一些功夫,当然还有以后的树状数组,线段树,划分树,红黑树,总理树,ORZ树……等数据结构上进行一些练习。
本题可以用数组或一般队列实现,但是鉴于本人的特色,选用了完全自主风格的优先队列,100%原创。
题目大意是给出优先级,对文件进行操作,按照优先级输出,没有优先级的话,按照FIFO的顺序,输出(临时把队列变成栈了……),通过本题,本人对数据结构有了一些深层的理解,比如标个号后排序来使队列变栈……还有对自定义类的构造参数的理解,原来可以这么写……
另:其实PRIOR_QUEUE有三种参数,但我只记得这一种了……
4AC(解决栈的时候耗了些功夫):
#include <iostream>
#include <queue>
#include <string>
using namespace std;
class info
{
public:
string task;
string attrib;
int youxian;
int wulinum;
info(string a,string b,int c,int d):task(a),attrib(b),youxian(c),wulinum(d)
{}
};
priority_queue<info> lineinfo;
bool operator < (const info &t1,const info &t2)
{
if(t1.youxian==t2.youxian)
{
return t1.wulinum > t2.wulinum;
}
else
return t1.youxian > t2.youxian;
}
int main()
{
string command;
int wulinum=0;
while(cin>>command)
{
if(command=="GET")
{
if(lineinfo.empty())
{
cout<<"EMPTY QUEUE!"<<endl;
}
else
{
info tmp=lineinfo.top();
cout<<tmp.task<<" "<<tmp.attrib<<endl;
lineinfo.pop();
}
}
if(command=="PUT")
{
string tmpls;
string tmpattr;
int prior;
int lastpor=prior;
cin>>tmpls>>tmpattr>>prior;
lineinfo.push(info(tmpls,tmpattr,prior,wulinum));
wulinum++;
}
}
return 0;
}