优先队列(堆)

在最小生成树的算法中,用Kruskal算法和Prime算法来解决,其中Kruskal算法会用到并查集这个数据结构,而并查集在任何一种语言中都没有现成的以实现好的结构,在Prime中会用到最小堆也就是优先队列,恰好STL中有实现这个这个数据结构。
头文件:#include

优先队列的三种声明方式
1.一般声明方式

priority_queue<int> a; //通过操作,按照元素从大到小的顺序出队
priority_queue<int,vector<int>,greater<int>> b; 
//通过操作,按照元素从小到大的顺序出队

2.自定义优先级

struct cmp{  
	operator bool()(int x , int y)  {   
		return x > y;  //x小的优先级高,也可以写成其他方式出队,例如:return a[i] > a[j],这样表示a[i]小的优先 
	}
};
priority_queue<int,vector<int>,cmp> s;
//其中,我们传入的第二个参数是容器的类型可以是vector,第三个参数为重载的比较函数
//重载时,只能重载 < ,重载 > 会出错。
struct cmp{    
bool operator ()(int a,int b){        
	return a<b;    //最大值优先    
	}
};

3.自定义数据结构

struct node {    
	int priority;    
	int value;    
	friend bool operator < (const node &a, const node &b) {
		return a.priority < b.priority;    //按照priority的优先级
	}    
	/* 这样写也可以    
	bool operator < (const node &a) const {        
		return priority < a.priority;    
	}    
	*/ 
};
priority_queue<node> q;

在Dijkstras算法中也用到了最小堆,类型为pair
priority_queue<pair,vector<pair>,greaeter<pair> >q就定义了一个由二元组构成的优先队列。pair定义了它自己的排序规则——先比较第一维,相等时才比较第二维。
为pair添加头文件#include<utility>(#include<map>)using namespace std;
map的内部设计到pair的使用,所以map头文件会自动添加#include头文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值