C++ STL——优先队列的结构体表示方法
2024-10-19 22:38:12
优先队列是队列的一种,但是自身具有一定的排序功能,所以不具有队列“先进先出”的性质
刚刚接触优先队列,看过网上的用法后感觉还是太过于朦胧,所以打算自己写一个稍微细节一点的。
头文件
#include<queue>
常用操作
q.push() //放入元素
q.pop() //弹出元素
q.empty()//判断队列是否为空
q.top()//返回头部元素
q.size()//返回队列元素个数
声明方式
priority_queue<int>q;
默认的情况是大顶锥,及先输出的是元素较大的;
如:输入5个数字:1 2 3 4 5 则输出为: 5 4 3 2 1
priority_queue<int,vector<int>,less<int> >q1;
priority_queue<int,vector<int> ,greater<int> > q2;
上面两种为标准的创建方式,第一个元素为元素类型,第二个为承装元素的容器,第三个为排列方式。
其中,用less<int> 作为排序方式,则输出为从大到小;
用greater<int>作位排序方式,则输出为从小到大;
换句话说,less对应小根堆,greater对应大根堆。
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node
{
int l,r;
inline bool operator <(const node &a)const{
return r<a.r;
}
};
int main()
{
priority_queue<node>w;
for(int i=;i<=;i++)
{
int m,n;
scanf("%d%d",&m,&n);
w.push((node){m,n});
}
while(!w.empty())
{
node s =w.top();
w.pop();
cout<<s.l<<" "<<s.r<<endl;;
}
}
上面的代码就是今天主要的分享内容:构造结构体来重新定义比较先后及顺序。
struct node
{
int l,r;
inline bool operator <(const node &a)const{
return r<a.r;
}
};
结构题里面包含两个部分:第一是数据区域。第二部分就是重新定义比较级的代码
关键在于重新定义比较级的 return;
如果你需要返回上面两组数据中第一个较大的数,就需要 return l<a.l (这里注意是小于号,与重构比较基函数相反)
而需要返回两组数据中第二个比较大的数,就需要 return r<a.r
同理,优先输出较小的数,和上面类似。
当然,也可以在里面按照自己的需要自己进行设计构造。
以上。
最新文章
- Lucene索引文件学习
- Flex帮助文档ASDoc
- linux线程控制&;线程分离
- javascript时间函数
- OMCS开发手册(03) -- 多媒体服务器
- CentOS下架设Telnet服务器
- http之head请求(转)
- Java 方法(变量)修饰符的使用顺序
- Linux/Unix--设备类型
- [译]asp-net-core-mvc-ajax-form-requests-using-jquery-unobtrusive
- 工作中常用的 Linux 命令
- 使用有序GUID:提升其在各数据库中作为主键时的性能
- mysql备份与还原-mysqldump备份、mysql与source还原
- BeanUtils出现Java.lang.NoClassDefFoundError解决
- tile38 server 密码保护
- excel 数据量较大边查询边输入到excel表格中
- sencha touch 百度地图扩展(2014-6-24)(废弃 仅参考)
- VC++ 共享内存读写操作
- web常用软件
- Servlet中使用 Last-Modified、Expires和Cache-Control