1. 头文件
#include<queue>
2. 普通队列queue
2.1 普通队列的声明与初始化
2.1.1 普通声明
queue<int> q;
2.1.2 结构体
struct node
{
int x,y;
};
queue<node> q;
2.2 普通队列的基本操作
push(x) 将x压入队列的末端
pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
front() 返回第一个元素(==队顶元素==)
back() 返回最后被压入的元素(队尾元素)
empty() 当队列为空时,返回true
size() 返回队列的长度
3. 优先队列priority_queue
优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则。
3.1 优先队列的声明与初始化
//对于基础类型 默认是大顶堆
priority_queue<int> a; //等同于 priority_queue<int, vector<int>, less<int> > a;
//这里一定要有空格,不然成了右移运算符↓
priority_queue<int, vector<int>, greater<int> > c; //小顶堆
for (int i = 0; i < 5; i++)
{
a.push(i);
c.push(i);
}
while (!a.empty())
{
cout << a.top() << ' ';
a.pop();
}
// 输出大顶堆a:4 3 2 1 0
while (!c.empty())
{
cout << c.top() << ' ';
c.pop();
}
// 输出小顶堆c:0 1 2 3 4
3.2 优先队列的基本操作
empty() 如果队列为空返回真
pop() 删除队顶元素
push() 加入一个元素
size() 返回优先队列中拥有的元素个数
top() 返回优先队列队顶元素(队列中的front()变成了top())
3.3 优先队列的自定义优先级
struct cmp {
operator bool ()(int x, int y)
{
return x > y; // x小的优先级高 //也可以写成其他方式,如: return p[x] > p[y];表示p[i]小的优先级高
}
};
priority_queue<int, vector<int>, cmp>q; //定义方法
//其中,第二个参数为容器类型。第三个参数为比较函数。