zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    python+selenium之页面元素截图
    selenium八大定位
    http概述之URL与资源
    数组中只出现一次的数字
    数字在排序数组中出现的次数
    把数组排成最小的数
    数组中出现次数超过一半的数字
    调整数组顺序使得奇数位于偶数的前面
    旋转数组的最小值
    二维数组的查找
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11387601.html
Copyright © 2011-2022 走看看