• priority_queue的常见用法


    priority_queue的常见用法

    priority_queue是什么?

    • 优先队列
    • 底层实现用堆来实现
    • 每次队首的优先级最大

    priority_queue的定义

    引入头文件

    # include <queue>
    using namespace std;
    

    定义使用

    priority_queue<typename> name;
    

    容器内元素的访问

    只能通过top()函数来访问队首的元素

    priority_queue<int> q;
    q.push(4);
    q.push(3);
    q.push(2);
    cout<<q.top()<<endl;//4
    

    priority_queue常用函数解析

    push()

    使得元素x入队,时间复杂度为o(logN)。

    top()

    获取队首的元素,时间复杂度为o(1)

    pop()

    pop()令队首出队,时间复杂度为o(logN)

    empty()

    检测队列是否为空,返回true,返回false

    size()

    返回队列中的元素数量

    priority_queue队列优先级的设置

    基本数据类型优先级的设置

    对于基础类型,一般是数字大的优先级高,对于字符,就是字典序越大,优先级越高。

    priority_queue<int> q;
    priority_queue<int,vector<int>,less<int>>;
    

    两种定义方式等价

    • vector是承载堆的容器
    • less是比较类,less表示数字大优先级大,greater表示数字大,优先级小

    结构体优先级设置

    重载小于号

    例子

    struct fruite{
        string name;
        string price;
    };
    

    价格高优先级高

    设置友元函数,重载小于号<

    struct fruite{
        string name;
        string price;
        friend bool operator <(fruite a,fruite b){
            return fruite.price<fruite.price;
        }
    };
    

    注意
    只能重载小于号
    如果"重载>"

     friend bool operator <(fruite a,fruite b){
            return fruite.price>fruite.price;
      }
    

    创建比较结构体

    struct fruite{
        string name;
        string price;
    };
    
    struct cmp{
        bool operator() (fruite a,fruite b){
            return a.price>b.price;
        }
    };
    
    priority_queue<fruite,vector<fruite>,cmp> q;
    

    priority_queue的用途以及注意点

    • 解决贪心问题
    • 注意在使用top()之前要判空使用empty()
  • 相关阅读:
    最常用的排序——快速排序
    堆排序 Heap Sort
    经典排序算法
    Android studio界面相关设置
    对了解矩阵、线性变换的本质有太大帮助
    [转]grep 在文本中查找内容
    [转] PHP在不同页面之间传值的三种常见方式
    快速幂取余 [转]
    Avril Lavigne : Everybody Hurts (Ver3)
    MySQL 初始化root 密码
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11387601.html
Copyright © 2020-2023  润新知