优先队列
引入
优先队列是一种功能强大的队列,我是在做一道排序题时遇到的。它的功能强大在它能够实现自动排序。
下面给出代码:
#include<iostream>
#include<queue>
using namespace std;
int main(){
priority_queue<int> q;
int b;
int n,a[10];
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++) q.push(a[i]);
for(int i=1;i<=n;i++) {b = q.top();q.pop();cout<<b<<endl;}
}
Input: 5
10 2 8 9 7
Output: 10
9
8
7
2
在这里优先队列自动的对整型元素进行了排序,排序为从大到小。
下面我们来看结构体的优先队列:
#include<iostream>
#include<queue>
using namespace std;
struct node{
int num;
int ord;
bool operator<(const node & x)const{
return num<x.num;
}
}qp;
int main(){
priority_queue<node> q;
int n,a[10];
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++) q.push((node){a[i],i});
for(int i=1;i<=n;i++) {qp = q.top();q.pop();cout<<qp.num<<endl;}
}
Input: 5
10 2 8 9 7
Output: 10
9
8
7
2
在这里,我们要给结构体定义一个算术重载符,用来作为优先队列排序的参考,不然就会报错。上述定义的算术运算符是从大到小的优先队列。