优先队列杂谈

优先队列

引入

优先队列是一种功能强大的队列,我是在做一道排序题时遇到的。它的功能强大在它能够实现自动排序。

下面给出代码:

#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

在这里,我们要给结构体定义一个算术重载符,用来作为优先队列排序的参考,不然就会报错。上述定义的算术运算符是从大到小的优先队列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C++中,优先队列是一种特殊的队列数据结构,它的元素按照一定的优先级进行排序。在优先队列中,每个元素都有一个与之相关联的优先级,优先级高的元素会被先出队列。 C++中使用优先队列需要包含头文件<queue>。下面是使用优先队列的一般步骤: 1. 定义优先队列:使用std::priority_queue类来定义一个优先队列对象。可以指定元素类型和比较函数(默认为std::less)。 例如:std::priority_queue<int> pq; // 定义一个存储int类型元素的优先队列 2. 插入元素:使用push()函数向优先队列中插入元素。 例如:pq.push(10); // 向优先队列中插入元素10 3. 访问队首元素:使用top()函数可以获取优先队列中的队首元素,即优先级最高的元素。 例如:int topElement = pq.top(); // 获取优先队列中的队首元素 4. 删除队首元素:使用pop()函数可以删除优先队列中的队首元素。 例如:pq.pop(); // 删除优先队列中的队首元素 需要注意的是,优先队列默认是按照元素的大小进行排序,即大顶堆(最大值在顶部)。如果需要自定义排序规则,可以通过自定义比较函数来实现。 下面是一些相关问题: 1. 什么是优先队列? 2. 如何定义一个优先队列对象? 3. 如何向优先队列中插入元素? 4. 如何获取优先队列中的队首元素? 5. 如何删除优先队列中的队首元素? 6. 优先队列是如何进行排序的? 7. 如何自定义优先队列的排序规则?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值