zoukankan      html  css  js  c++  java
  • C++ priority_queue

    1. 优先级队列,即堆,定义为priority_queue<Type, Container, Functional>

    Type 就是数据类型,Container 就是容器类型,Functional是比较方式

    //小顶堆
    priority_queue <int,vector<int>,greater<int> > q;
    //大顶堆,不写比较默认是大顶堆
    priority_queue <int,vector<int>,less<int> >q;

     基本操作:

    • top 访问队头元素
    • empty 队列是否为空
    • size 返回队列内元素个数
    • push 插入元素到队尾 (并排序)
    • emplace 原地构造一个元素并插入队列
    • pop 弹出队头元素
    • swap 交换内容

    2. 自定义类型的比较

    //自定义类型
    struct myclass{
        double pass;
        double total;
        myclass(int p,int t){//构造函数
            pass=p;
            total=t;
        }
    };
    //重载<运算符,实现比较
    bool operator <(myclass a,myclass b){//返回true,a的优先级低
        double ra=(a.total-a.pass)/((a.total+1)*a.total);
        double rb=(b.total-b.pass)/((b.total+1)*b.total);
        return ra<rb;
    }
    //使用时直接写类型就行了,默认的 vector 基础容器以及 less 排序规则
    priority_queue<myclass> pq;

    原理:通过重载 < 运算符,使得 std::less<T> 变得适用了

  • 相关阅读:
    day4笔记
    day3笔记
    day2 python基础 while 循环补充
    day1笔记 初识python,paython基础
    指针-1
    scanf输入与getchar的比较
    [递归]母牛的故事
    安装mysql以及遇到的问题解决
    33.指针
    32.字符串
  • 原文地址:https://www.cnblogs.com/Kinghao0319/p/14397408.html
Copyright © 2011-2022 走看看