优先队列基本操作

一.优先队列概念

了解完队列之后我们来了解一种特殊的队列--优先队列

优先队列是一种特殊的队列,相较于队列它的特殊也是功能最强大之处在于能自动排序。

二.优先队列的头文件

#include

using namespace std; //命名空间不是头文件

三.优先队列的声明

优先队列声明的基本格式是: 
priority_queue<结构类型> 队列名;

例:

 
  1.  
    priority_queue  p; 
     
    priority_queue   p;
    

    然而最常用的是以下几种

  2. priority_queue  p;
    //node是一个结构体
    //结构体里重载了‘<’小于符号
    priority_queue ,greater > p;
    //不需要#include头文件
    //注意后面两个“>”不要写在一起,“>>”是右移运算符
    priority_queue ,less >p;
    

    四.优先队列的基本操作

    与队列的操作基本一致

    例.queue q;

    1.入队 q.push();

    2.出队 q.pop();

    3.求队列中元素个数 q.size();

    4.判断度列是否为空 q.empty();若为空返回true,否则返回false

    5.获得首元素 q.top();

    6.返回q的第一个元素  q.top();

    7.返回q的末尾元素 q.back();

    五.优先队列的排序

    默认的优先队列 priority_queue q;排序是由大到小的,代码为证

     
  3.  
    #include
    #include
    using namespace std;
    int main()
    {
        priority_queue q;
        int num[5]={19,2,4,3,6};
        for(int i=0;i<5;i++)
            q.push(num[i]);
        for(int i=0;i<5;i++)
        {
            int temp=q.top();
            printf("%d ",temp);
            q.pop();
        }
        return 0;
    }
    

    默认的优先队列(结构体,重载小于)

  4. #include
    #include
    using namespace std;
    struct node
    {
        int x,y;
        bool operator < (const node & a) const
        {
            return x q;
    int main()
    {
        printf("读入:\n");
        for(int i=0;i<5;i++)
        {
           scanf("%d%d",&s.x,&s.y);
           q.push(s);
        }
        printf("输出:\n");
        while(!q.empty())
        {
            node temp=q.top();
            printf("(%d,%d) ",temp.x,temp.y);
            q.pop();
        }
        return 0;
    }
    

    接下来是less和greater优先队列

    以int为例,先声明:

由此可见

less是从大到小,greater是从小到大

你可能感兴趣的:(优先队列基本操作)