队列:
//队列容器:队首出队,队尾入队。
#include<queue>//queue头文件
#include<iostream>
using namespace std;
int main(int argc,char*argv[])
{
queue<int>q;//定义一个整形队列,元素类型是整形。
//入队,即插入元素;
q.push(1);
q.push(2);
q.push(3);
q.push(9);
cout<<q.size()<<endl;//返回队列元素数量
cout<<q.empty() <<endl;//判断队列是否为空,是空返回逻辑真(1 ),否则返回逻辑假(0);
cout<<q.front() <<endl;//读取队首元素
cout<<q.back() <<endl;//读取队尾元素
while(!q.empty() )//所有的元素出列
{
cout<<q.front() <<" ";//队首元素出队(删除队首元素)
q.pop() ;
}
cout<<endl;//回车换行
return 0;
}
优先队列:
优先队列:队尾入队,队首出队。默认排序:由大到小
#include<queue>//priority_queue头文件
#include<iostream>
using namespace std;
int main(int argc,char* argv){
priority_queue<int>pq;//定义一个整形优先队列,元素类型是整形
pq.push(1);
pq.push(2);
pq.push(3);
pq.push(9);
cout<<pq.size() <<endl;//返回队列中元素个数
while(pq.empty() !=true)//所有元素出队,删除所有元素。
{
cout<<pq.top() <<" ";//读取当前队首元素
pq.pop() ;
}
cout<<endl;//回车换行
return 0;
}
重载:
一:
//在结构体中重载“<”操作符的方法来修改优先队列的优先性
#include<queue>
#include<string>
#include<iostream>
using namespace std;
struct Info{//定义结构体
string name;
float score;
bool operator<(const Info &a)const //后一个const不可少
{
return a.score <score;
}
};
int main(int argc,char *argv[])
{
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()!=true )//队空不为真,即队空为假时
{
cout<<pq.top() .name<<" : "<<pq.top() .score<<endl;
pq.pop() ;
}
return 0;
}
二:
#include<vector>//所谓“vector”,即矢量(向量).
#include<iostream>
using namespace std;
//重载“()”操作符
struct myComp
{
bool operator ()(const int &a,const int &b)
{ //从小到大排列采用“>”号;如果要由大到小,则采用“>”号。
return a<b;
}
} ;
int main(int argc,char *argv[])
{ //定义优先队列,元素类型为Info结构体,显式说明内部结构是vector
priority_queue<int,vector<int>,myComp>pq;
//入队
pq.push(1);
pq.push(9);
pq.push(2);
pq.push(30);
//元素全部出队
while(pq.empty() !=true)
{ //返回队首元素
cout<<pq.top() <<" ";
//出队,删除队首元素
pq.pop() ;
}
cout<<endl;
return 0;
}
版权声明:本文为blacksleeping原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。