priority_queue
之前数据结构课程所学只是简单的队列,其在STL中的用法已整理到 【STL】C++ 队列 queue。优先队列是第一次接触,现简单整理优先队列的用法。
简介
优先队列,行为有些像队列,但先出队列的元素不是先进队的元素,而是队列中优先级最高的元素。
头文件
与队列同在 queue 头文件里。
#include<queue>
priority_queue<Type, Container, Functional>
#include<queue>
/*默认越大正数优先级越高*/
priority_queue<int> p; //默认大顶堆,入队后降序排序
/*
Type 数据类型, 如int
Container 容器类型, 如vector<int>,不能用list
Functional 比较方式
*/
priority_queue<Type, Container, Functional>
priority_queue<ListNode*, vector<ListNode*>, Cmp> heap;
C++ operator重载操作符
//C++符号重载方式
返回值类型 operator 运算符名称 (形参表列){
//TODO:
}
//识别到符号()时,会调用operator()( , )函数
bool operator() (ListNode* a, ListNode* b) {
return a->val > b->val;
}
Functional 结构体(当函数用)
struct Cmp {
//需要重载()
//识别到符号()时,会调用operator()( , )函数
bool operator() (ListNode* a, ListNode* b) {
//默认大根堆把大的放到前面, 把<换成>实现把小的放前面
return a->val > b->val;
}
}
常用操作
//访问队头元素,与队列不同,优先队列没有front()和back()
p.top();
//入队,插入元素到队尾
p.push();
//出队,删除队头元素,但不返回被弹出元素的值。
p.pop();
//判断优先队列是否为空,为空则返回 1,否则返回 0
p.empty();
//返回元素个数
p.size();
//交换内容
p.swap();