1. 队列容器queue是一个先进先出(FirstIn First Out,FIFO)的线性存储表,元素的插入只能在队尾,元素的删除只能在队首。
2. 入队:push() 形式:q.push(1);
3. 出对:pop() 形式:q.pop() //是从队首出去
4. 读取队首元素:front() 形式: cout<<q.front()<<endl;
5. 读取队尾元素:back() 形式:cout<<q.back()<<endl;
6. 判断是否为空:empty() 形式:cout<<q.empty();若为空返回1,否则返回0
7. 队列当前元素的数目:size() 形式:cout<<q.size()<<endl;
优先队列容器priority_queue
1.优先队列容器priority_queue与队列一样,只能从队尾插入元素,从队首删除元素。但它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认按元素的值由大到小排序;当然,可以重载“<”操作符来重新定义比较规则。也可以重载“()”重新定义比较规则。
声明的头文件为#include<queue>。
2. 入队:push() 形式:pq.push(1);
3. 出队:pop() 形式:pq.pop();是从队首出去
4. 读取队首元素:top() 形式:cout<<pq.top();只有这一种形式,没有,cout<<pq.front();或者是cout<<pq.back();
5. 判断队列是否为空:empty() 形式:pq.empty();若为空返回1,否则返回0
6. 队列当前元素的数目:size() 形式: cout<<pq.size()
7. 重载“<”操作符来定义优先级:
#include<queue>
#include<string>
#include<iostream>
using namespace std;
struct Info{
string name;
float score;
bool operator < (const Info &a) const
{
return a.score<score;//按score由小到大排列,如果要由大到小排列,使用“>”号即可。
}
};
int main()
{
priority_queue<Info> pq;
Info info;
info.name="Jack";
info.score=68.5;
pq.push(info);
info.name="Bomi";
info.score=18.5;
pq.push(info);
info.name="Peti";
info.score=90;
pq.push(info);
while(!pq.empty())
{
cout<<pq.top().name<<" : "<<pq.top().score<<endl;
pq.pop();
}
return 0;
}
8. 重载“()”操作符来定义优先级:
#include<queue>
#include<string>
#include<iostream>
using namespace std;
struct myComp{
bool operator() (const int &a,const int &b)
{
return a>b; //由小到达用“>”,若由大到小用“<”
}
};
int main()
{
priority_queue<int,vector<int>,myComp> pq;
pq.push(1);
pq.push(9);
pq.push(2);
pq.push(30);
while(!pq.empty())
{
cout<<pq.top()<<" ";
pq.pop();
}
return 0;
}