#include<queue>
#include<iostream>
using namespace std;
priority_queue <int> q1; //默认大根堆
//小根堆:
struct cmp
{
bool operator()(int &a,int &b)
{
return a>b; //'>'从小到大 从大到小改成 '<'
}
};
priority_queue <int,vector<int>,cmp> q2; //重载运算符变小根堆
priority_queue <int,vector<int>,greater <int> >q3; //直接变小根堆 '>>'会被认为是错误 中间要加空格
//结构体:
struct node{
int x;
int y;
bool operator < (const node &a) const //无论大小根,一定为 ' < '
{
if(x==a.x) return y>a.y;
else return x>a.x; //'>'从小到大 从大到小改成 '<'
}
};
priority_queue <node> q4; //定义结构体类型的堆(大根小根可控)
int main()
{
//q.push (x); 将x接到队列的末端
//q.top (); 访问队首元素
//q.pop (); 删除队首元素
//q.front(); 访问队首元素 最早被压入队列的元素
//q.back(); 访问队尾元素 最后被压入队列的元素
//q.size(); 访问队列中的元素个数
//q.empty (); 判断是否为空 当队列空时,返回true
//普通排序:
int n,a[100];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
q1.push(a[i]);
}
for(int i=1;i<=n;i++)
{
cout<<q1.top()<<" ";
q1.pop();
}
//结构体排序:
int n2;
node a2[100];
cin>>n2;
for(int i=1;i<=n2;i++)
{
cin>>a2[i].x;
}
for(int i=1;i<=n2;i++)
{
cin>>a2[i].y;
q4.push(a2[i]);
}
for(int i=1;i<=n2;i++)
{
cout<<q4.top().x<<" "<<q4.top().y<<endl;
q4.pop();
}
}
优先队列(堆)STL 模板
最新推荐文章于 2022-08-03 17:30:20 发布