queue 队列
queue 队列 就像排队一样,后来的排在后面,先来的先出队。所以只能对队首和队尾的元素进行操作
back() | 返回最后一个元素 |
empty() | 如果队列空则返回真 |
front() | 返回第一个元素 |
pop() | 删除第一个元素 |
push() | 在末尾加入一个元素 |
size() | 返回队列中元素的个数 |
#include<queue>
#include<iostream>
using namespace std;
int main()
{
queue<int>q;
q.push(1); //在队列末尾依次插入1 2 3
q.push(2);
q.push(3);
int u=q.back(); //返回队列中最后一个元素
cout<<"队列最后一个元素为:"<<u<<endl;
int v=q.front(); //返回队列中第一个元素
cout<<"队列第一个元素为:"<<v<<endl;
q.pop(); //删除第一个元素
v=q.front();
cout<<"队列第一个元素为:"<<v<<endl;
int size=q.size(); //size返回元素个数
cout<<"队列中存在"<<size<<"个元素"<<endl;
cout<<"判断队列是否为空,空输出1 否则输出1:"<<endl;
int flag=q.empty(); //判断队列是否为空,为空返回1,否则返回0
cout<<flag<<endl;
return 0;
}
priority_queue 优先队列
优先队列,是有优先级高低之分,队首的元素是优先级最高的。
在优先队列中,没有 front() 函数与 back() 函数,而只能通过 top() 函数来访问队首元素(也可称为堆顶元素),也就是优先级最高的元素。
empty() | 如果优先队列为空,则返回真 |
pop() | 删除第一个元素 |
push() | 加入一个元素 |
size() | 返回优先队列中拥有的元素的个数 |
top() | 返回优先队列中有最高优先级的元素 |
priority_queue<Type, Container, Functional>
Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。
如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int main ()
{
priority_queue<int> q;//默认从大到小
//priority_queue<int,vector<int>,greater<int> > q;//从小到大排序
//priority_queue<int,vector<int>,less<int> > q;//从大到小
q.push(90);
q.push(56);
q.push(100);
while(q.empty()!=1)
{
cout << q.top() << " ";
q.pop();
}
return 0;
}
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct stu
{
string name;
int age;
bool operator<(const stu &p)const
{
return age>p.age;
}
}S[5];
int main()
{
for(int i=0;i<5;i++)
{
cin >> S[i].age >> S[i].name;
}
priority_queue<stu>q;
for(int i=0;i<5;i++)q.push(S[i]);
while(!q.empty())
{
cout<<q.top().name<<" ";
q.pop();
}
return 0;
}
struct stu
{
string name;
int age;
}S[5];
struct cmp
{
operator ()(const stu &a,const stu &b)
{
return a.age > b.age;
}
};
priority_queue<stu,vector<stu>,cmp> q;
struct stu
{
string name;
int age;
}S[5];
struct cmp
{
bool operator () (const stu &a,const stu &b) const
{
return a.age > b.age;
}
};
priority_queue<stu,vector<stu>,cmp> q;
struct stu
{
string name;
int age;
friend bool operator <(stu a,stu b)
{
return a.age > b.age;
}
}S[5];
(按照年龄的升序排列)