zoukankan      html  css  js  c++  java
  • HDU1509 优先队列

    题意(需注意两点):

           1.Note that the less priority value means the higher priority(标准优先队列)

           2.the one comes first will be processed firs(当priority优先级相同是,先进先出)

           

    #include<string.h>
    #include<queue>
    #include<iostream>
    using namespace std;
    struct node        //自定义优先队列结构体
    {
        char str[100];
        int par;
        int pri;
        int index;
        bool operator <(const node &x)const//重载 > 号会出错
        {
            if(pri!=x.pri)
            return pri>x.pri;//小的先进先出
            else
            return index>x.index;//与main中的k对应,先进先出
        }
    };
    int main()
    {
        priority_queue<node>que;//优先队列的定义
        int k=0;
        char cmd[4];
        node temp;
        while(cin>>cmd)
        {
            if(strcmp(cmd,"GET")==0)//输入GET时
            {
                if(!que.empty())
                {
                    temp=que.top();
                    que.pop();
                    cout<<temp.str<<' '<<temp.par<<endl;
                }
                else cout<<"EMPTY QUEUE!"<<endl;
            }
            else
            {
                cin>>temp.str>>temp.par>>temp.pri;
                temp.index=++k;
                que.push(temp);
            }
        }
        return 0;
    }

    一起学习一下优先队列相关知识:

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    empty() 如果队列为空返回真

    pop() 删除对顶元素

    push() 加入一个元素

    size() 返回优先队列中拥有的元素个数

    top() 返回优先队列对顶元素

    在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。

    使用方法:

    头文件:

    #include <queue>

    声明方式:

    1、普通方法:

    priority_queue<int>q;
    //通过操作,按照元素从大到小的顺序出队

    2、自定义优先级:

    struct cmp
    {
    operator bool ()(int x, int y)
    {
    return x > y; // x小的优先级高
    //也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高
    }
    };
    priority_queue<int, vector<int>, cmp>q;//定义方法
    //其中,第二个参数为容器类型。第三个参数为比较函数。

    3、结构体声明方式:

    struct node
    {
    int x, y;
    friend bool operator < (node a, node b)
    {
    return a.x > b.x; //结构体中,x小的优先级高
    }
    };
    priority_queue<node>q;//定义方法
    //在该结构中,y为值, x为优先级。
    //通过自定义operator<操作符来比较元素中的优先级。
    //在重载”<”时,最好不要重载”>”,可能会发生编译错误

    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    STL 中队列的使用(queue)

    基本操作:

    push(x) 将x压入队列的末端

    pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值

    front() 返回第一个元素(队顶元素)

    back() 返回最后被压入的元素(队尾元素)

    empty() 当队列为空时,返回true

    size() 返回队列的长度

    使用方法:

    头文件:

    #include <queue>

    声明方法:

    1、普通声明

    queue<int>q;

    2、结构体

    struct node
    {
    int x, y;
    };
    queue<node>q;

  • 相关阅读:
    hibernate_0100_HelloWorld
    MYSQL子查询的五种形式
    JSF是什么?它与Struts是什么关系?
    nop指令的作用
    htmlparser实现从网页上抓取数据(收集)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the
    FCKeditor 在JSP上的完全安装
    Java遍历文件夹的2种方法
    充电电池和充电时间说明
    吃知了有什么好处
  • 原文地址:https://www.cnblogs.com/XDJjy/p/2996609.html
Copyright © 2011-2022 走看看