• 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

  • 相关阅读:
    BZOJ 2456: mode
    替罪羊树(模板)
    LUOGU P4168 [Violet]蒲公英
    洛谷题目统计爬虫
    LUOGU P3819 松江1843路
    bzoj 2946 [Poi2000]公共串——后缀自动机
    bzoj 4032 [HEOI2015]最短不公共子串——后缀自动机
    bzoj 2555 SubString——后缀自动机+LCT
    洛谷 3804 【模板】后缀自动机
    洛谷 4106 / bzoj 3614 [HEOI2014]逻辑翻译——思路+类似FWT
  • 原文地址:https://www.cnblogs.com/LjwCarrot/p/9480564.html
Copyright © 2020-2023  润新知