• 优先队列(priority_queue)


    priority_queue又称优先队列,其底层用堆来进行实现。在优先队列中,队首元素一定是当前队列中优先级最高的那一个。

    用处:当作最大,最小堆来使用,免去堆的一系列复杂操作。

    一、priority_queue的定义

    添加头文件#include<queue>,并在头文件下面加上“using namespace std;”

    二、访问

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3fffffff
    const int maxn=1010;
    int main(){
        priority_queue<int> q;
        q.push(3);
        q.push(4);
        q.push(1);
        printf("%d
    ",q.top());
        return 0;
    }

    三、常用函数实例

    (1)push()

    push(x)将x入队,时间复杂度为O(logN),N为元素个数

    (2)top()

    top()可以获得队首元素(即堆顶元素),时间复杂度为O(1)

    (3)pop()

    pop() 令队首元素(即堆顶元素)出队,时间复杂度为O(logN)

    实例:

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3fffffff
    const int maxn=1010;
    int main(){
        priority_queue<int> q;
        q.push(3);
        q.push(4);
        q.push(1);
        printf("%d
    ",q.top());
        q.pop();
        printf("%d
    ",q.top());
        return 0;
    }

    (4)empty()

    empty()检测优先队列是否为空,返回true则空,返回false则非空,时间复杂度O(1)

    (5)size()

    size()返回优先队列内元素个数,时间复杂度为O(1)

    四、priority_queue内元素优先级的设置

    (1)基本数据类型的优先级设置(int,double,char等)

    priority_queue(int) q;
    priority_queue(int,vector<int>,less<int> ) q;   //less<int> 表示数字大的优先级越大
    priority_queue(int,vector<int>,greater<int> ) q;    //greater<int> 表示数字小的优先级大

    (2)结构体的优先级设置

    #include<bits/stdc++.h>
    using namespace std;
    #define inf 0x3fffffff
    const int maxn=1010;
    //priority_queue(int) q;
    //priority_queue(int,vector<int>,less<int> ) q;   //less<int> 表示数字大的优先级越大
    //priority_queue(int,vector<int>,greater<int> ) q;    //greater<int> 表示数字小的优先级大
    struct fruit{
        string name;
        int price;
        friend bool operator< (fruit f1,fruit f2){    //表示f1<f2
            return f1.price<f2.price;   //表示price大的优先级高
            return f1.price>f2.price;   //表示price小的优先级高
        }
    }f1,f2,f3;
    int main(){
        priority_queue<fruit> q;
        f1.name="a";
        f1.price=1;
        f2.name="b";
        f2.price=2;
        f3.name="c";
        f3.price=3;
        q.push(f1);
        q.push(f2);
        q.push(f3);
        cout<<q.top().name<<" "<<q.top().price<<endl;
        return 0;
    }
    
    //输出:c 3

     五、常见用途:

    priority_queue可以解决一些贪心问题,也可以对dijkstra算法进行优化(因为优先队列首先是堆)。

  • 相关阅读:
    广播发送和接受者
    contentProvider 内容提供者
    自定义控件,开关左右滑动
    手指多点触控事件
    GO语言练习:第一个Go语言工程--排序
    GO语言练习:不定参数函数
    GO语言练习:多返回值函数
    GO语言练习:for基本用法
    GO语言练习:switch基本用法
    GO语言练习:map基本用法
  • 原文地址:https://www.cnblogs.com/dreamzj/p/14624505.html
Copyright © 2020-2023  润新知