STL--priority_queue学习笔记

priority_queue优先队列

在学习了堆优化的迪杰斯特拉时,学了优先队列,发现非常好用。QAQ之前应该早点学的,哎,自己又菜又懒,咸鱼王无疑了。学习知识点记录下来!


优先队列就是将队列中的元素赋予优先级,在访问优先队列中的元素时,具有最高优先级的元素先被访问。队列时先进先出,而优先队列是优先级最高的先出。

 

初始化:需要 头文件 #include<queue>

priority_queue<Type, Container, Functional>

Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 listSTL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型时才需要传入这三个参数,使用基本数据类型时,只需要传入数据类型,默认是大顶堆 

一般是:

priority_queue <int,vector<int>,greater<int> > q; //升序队列
priority_queue <int,vector<int>,less<int> >q;     //降序队列
Priority_queue<node>q;                         //    node为结构体,可以自定义优先级

基本操作:

empty( )  //判断一个队列是否为空
pop( )  //删除队顶元素
push( )  //加入一个元素
size( )  //返回优先队列中拥有的元素个数
top( )  //返回优先队列的队顶元素

代码

#include<iostream>
#include<queue>
using namespace std;
int main()
{
    priority_queue<int,vector<int>,greater<int> >q1;            //升序队列
    priority_queue<int,vector<int>,less<int> >q2;            //降序队列
    
    int a[5]={4,5,2,1,3};
    for(int i=0;i<5;i++)
    {
        q1.push(a[i]);
        q2.push(a[i]);
    }
    
    cout<<"升序队列"<<endl;
    while(!q1.empty())
    {
        cout<<q1.top()<<' ';
        q1.pop();
    } 
    cout<<endl;
    cout<<"降序队列"<<endl;
    while(!q2.empty())
    {
        cout<<q2.top()<<' ';
        q2.pop();
    } 
    return 0;
} 
//自定义优先级
#include<iostream>
#include<queue>
using namespace std;
struct node
{
    int x,y;
    node(){}
    node(int a,int b)
    {
        x=a;y=b; 
    }
    operator < (const node &rhs)const
    {
        return x>rhs.x;                    //x大的优先级高
    //    return y>rhs.y;                 //y大的优先级高 
    }
}; 
int main()
{
    priority_queue<node>q;
    q.push(node(3,1)); 
    q.push(node(2,2)); 
    q.push(node(4,3)); 
    q.push(node(5,4));
    q.push(node(1,5)); 
    
    while(!q.empty())
    {
        node temp=q.top();
        q.pop();
        cout<<temp.x<<' '<<temp.y<<endl;
    } 
    return 0;
} 

参考:

https://blog.csdn.net/ac_gibson/article/details/44200411

https://blog.csdn.net/weixin_36888577/article/details/79937886

 

posted @ 2018-08-15 12:27  _Carrot  阅读(814)  评论(0编辑  收藏  举报