priority_queue 概述
priority_queue 是一个拥有优先级的queue. 默认为大顶堆,即权值高者排在最前面
queue 以底部容器完成其工作, 因此priority_queue往往不被称为container, 而是被称为container adapter.
由于这是一个queue, 所以只允许在低端加入数据,从顶端取出数据,除此之外没有其他存取元素的路径。
常用操作
top()
empty()
size()
push()
emplace()
pop()
swap()
在头文件中共 定义
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
T 就是数据类型, Container 容器默认为vector, Compare 默认为less - 大顶堆
基本数据类型
//对于基础类型 默认是大顶堆
priority_queue<int> big; //默认为大顶堆
//priority_queue<int, vector<int>, less<int> > big;
priority_queue<int, vector<int>, greater<int> > small; //定义小顶堆,即数字小的排在最前面。 需要用greater!
非基本数据类型
例如pair 类型的数据,
priority_queue<pair<int, int>, vector<pair<int, int>>, comparison_function> pri_que;
需要定义比较器。例如定义如下比较器, 则pri_que 是以pair类型的数据的第二个数据构建的小顶堆
class mycomparison {
public:
bool operator()(const pair<int, int>& a, const pair<int, int>& b) {
return a.second > b.second;
}
};