【许久不见的STL和优先队列君】HDU1509——Windows Message Queue

来源:互联网 发布:淘宝收到差评会怎样 编辑:程序博客网 时间:2024/05/04 06:42

     题目链接在此

     这个题可能是我找回状态的前奏,个人感觉。

     由于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;}elsereturn 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;}