0x01.说明
- priority_queue是STL所提供的一个非常有效的容器。
- 优先队列包含在头文件
<queue>
中。 - 优先队列由二项队列编写而成的。
- 查找最大值最小值的效率为
O(log N)
。 - 和
queue
不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 - 优先队列的本质是一个堆实现的。
0x02.定义
priority_queue< type, container, function >
三个参数依次为:
- type: 数据类型;
- container:实现优先队列的底层容器,必须是数组形式实现的容器,默认情况下(不加后面参数)是以
vector
为容器; - function: 元素之间的优先级顺序;
说明:
- 在只使用第一个参数时,优先队列默认是一个最大堆,每次输出的堆顶元素是此时堆中的最大元素。
0x03.基本使用
优先队列的成员函数和队列基本相同,不过入队的优先级不同。
//小顶堆
priority_queue <int,vector<int>,greater<int> > q;
//大顶堆
priority_queue <int,vector<int>,less<int> >q;
//需要头文件 #include <functional>
自定义优先级:
//使用函数重载默认的<
bool myCom(int a, int b) {
return a>b;
}
priority_queue<int, vector<int>, function<bool(int,int)>> temp(myCom);
//传入比较结构体,自定义优先级。
struct cmp{
bool operator ()(int a,int b){ //通过传入不同类型来定义不同类型优先级
return a>b; //最小值优先
}
};
auto my_comp = [](const int a, const int b){ return a > b; };
priority_queue<int, vector<int>, decltype(my_comp)> queue(my_comp);
ATFWUS --Writing By 2020–03–23