priority_queue 模板有 3 个参数,其中两个有默认的参数;
第一个参数是存储对象的类型(一个节点中存储的数据类型)
第二个参数是存储元素的底层容器(整个priority的形状)
第三个参数是函数对象,定义了一个用来决定元素顺序的断言(可理解为排序函数)
因此模板类型是:
template, typename Compare=std::less > class priority_queue
模板中第二个参数默认为vector容器,第三个参数默认为less
less
less
greater
举个例子:我们希望用priority_queue存储一个同学的成绩、姓名和学号
那么第一个参数可以是:pair
仍然选择vector作为底层容器,第二个参数:vector
第三个参数是我们自己定义的比较函数compare
我们需要的priority_queue就长这样:
priority_queue>, vector >>, compare> grades;
我们希望在将学生的数据推入priority_queue的时候自动排好序,且成绩高的同学排在前面,那么需要一个能够构成大堆顶的compare
struct compare{
template
bool operator()(T const& left, U const&right){
return left.first > right.first;
}
};
将上面的left.first > right.first改为left.first > right.first就变成小堆顶了
常用操作push(const T& obj):将obj的副本放到容器的适当位置,这通常会包含一个排序操作
push(T&& obj):将obj放到容器的适当位置,这通常会包含一个排序操作
emplace(T constructor a rgs…):通过调用传入参数的构造函数,在序列的适当位置构造一个T对象。为了维持优先顺序,通常需要一个排序操作
top():返回优先级队列中第一个元素的引用
pop():移除第一个元素
size():返回队列中元素的个数
empty():如果队列为空的话,返回true
swap(priority_queue& other):和参数的元素进行交换,所包含对象的类型必须相同
priority_queue的底层实现是堆排序,如果不了解什么是堆排序可以看看这个视频–>堆排序(heapsort)



