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> 变得适用了

原文地址:https://www.cnblogs.com/Kinghao0319/p/14397408.html