C++提供队列是一种容器适配器,符合数据结构中队列的特征,是一种FIFO
的数据结构
back()
返回队尾数据的一个引用empty()
如果队列为空,返回true
,否则返回false
front()
返回队首元素的引用pop()
将队首元素出队push()
将一个元素入队size()
返回队列中元素的个数
队列的衍生容器
deque 双向队列
deque()
构造器
能通过以下四种方式创建:- 无参:创建一个空的双向队列
size
:创建一个大小为size
的双向队列num and val
:放置num
个val
的拷贝到队列中from deque
:从from
创建一个内容一样的双向队列
assign(num,val)
:给双向队列设置num
个val
的值at(pos)
:返回指向双向队列中位置pos
上的元素的引用pop_back()
:删除双向队列尾部的元素pop_front()
:删除双向队列头部的元素push_back()
:向队列尾部添加元素push_front()
:向队首添加元素
priority queue 优先队列
在优先队列中,存储的元素被赋予了优先级别。当访问元素的时候,具有最高优先级别的元素会最先被删除。
priority_queue()
:构造器
使用基本的数据类型的时候,只需要传入数据类型;默认是大根堆
使用自定义的数据类型的时候,需要指定三个参数priority_queue<Type,Container,Functional>
// 升序队列,小根堆
priority_queue<int,vector<int>,greater<int>> q;
// 降序队列,大根堆
priority_queue<int,vector<int>,less<int>> q;
使用自定义数据类型:
按照Person
类的number
较大值设置优先级,(**number**
大的先出)#include <bits/stdc++.h>
using namespace std;
class Person{
public:
int number;
Person(){
}
Person(int number){
this->number = number;
}
bool operator<(const Person& p) const{
return this->number < p.number;
}
};
class Person_Comparable{
public:
bool operator()(Person p1,Person p2){
return p1.number < p2.number;
}
};
int main(){
priority_queue<Person,vector<Person>,Person_Comparable> q;
Person p1(1);
Person p2(2);
Person p3(3);
q.push(p1);
q.push(p2);
q.push(p3);
while(!q.empty()){
cout << q.top().number << endl;
q.pop();
}
system("pause");
return 0;
}
top()
返回优先队列中有最高优先级的元素