赞
踩
说到优先队列,大家肯定想到了队列(这肯定是对于学过队列的同学来说,当然了,没学过也没事,对于本篇文章没什么问题滴),队列的特征是后进后出,按照排队先来后到的顺序的,本篇文章介绍的priority_queue优先队列是按照优先级的顺序来排队,优先级我们可以把它理解成是一种规则,不像队列那样抽象的说是按照时间的,优先队列的这种规则我们可以自己自定义,接下来我们来看看具体的讲解。
目录
(2)pair类型 比较(先比较第一个,如果第一个想等的话再比较第二个)
size() 优先队列中的元素个数 empty() 判断优先队列中的元素是否为空 top() 优先队列中的队首元素,也就是优先级最高的元素 push() 插入元素到队尾,并且按照优先级排好序 pop() 删除容器中的第一个元素
priority_queue<type,container,functional>
type:就是类型,如int,double等等。
container:容器类型的意思,必须是用数组实现的容器,比如说有vector,deque等,但不能用list链表,STL默认的是vector,如果没有理解的话,我们就把这段介绍简化为以后要用vector就行啦,基本上都是它。
functional:就是比较的方式,也就是自定义的规则。
当我们想要自定义规则,才需要传入这三个参数,平时一般不需要的。
如priority_queue<int>是从大到小排的,就是降序(大顶堆,有些资料又说是小顶堆,我都搞糊涂了,哈哈哈)
- //priority_queue<int>降序排列,从大到小
- //priority_queue<int,vector<int>,less<int> >降序排列
- //priority_queue<int,vector<int>,greater<int> >升序排列,从小到大
-
- #include<bits/stdc++.h>
- using namespace std;
- int n;
- priority_queue<int>a;//初始是从大到小排序
- int main()
- {
- cin>>n;
- int x;
- for(int i=0;i<n;i++){
- cin>>x;
- a.push(x);
- }
- while(!a.empty()){
- cout<<a.top()<<" ";
- a.pop();
- }
- return 0;
- }
- #include<bits/stdc++.h>
- using namespace std;
- priority_queue<pair<int,int> >a;//从大到小,降序排列
- int main()
- {
- pair<int,int>b(11,2);
- pair<int,int>c(1,23);
- pair<int,int>d(234,3);
- pair<int,int>e(78,888);
- a.push(b);
- a.push(c);
- a.push(d);
- a.push(e);
- while(!a.empty()){
- cout<<a.top().first<<" "<<a.top().second;
- cout<<endl;
- a.pop();
- }
- return 0;
- }
struct rule{
bool operator()(node a,node b){
return a.y<b.y;
}
};这个叫做运算符重载,顾名思义,就是自己修改规则,rule是自定义的规则名称,自己选择,其他的大家可以当成死记硬背的知识,return 后面的语句就是自己指定的规则,上面的规则是按照结构体中成员变量y从大到小来排序的
- #include<bits/stdc++.h>
- using namespace std;
- typedef struct{
- int x;
- int y;
- }node;
- struct rule{ //按照结构体中y从大到大
- bool operator()(node a,node b){
- return a.y<b.y;
- }
- };
- int main()
- {
- int n;
- cin>>n;
- priority_queue<int,vector<node>,rule>a;
- for(int i=0;i<n;i++){
- node q;
- cin>>q.x>>q.y;
- a.push(q);
- }
- cout<<"优先级级:-----------"<<endl;
- while(!a.empty()){
- cout<<a.top().x<<" "<<a.top().y;
- cout<<endl;
- a.pop();
- }
- return 0;
- }
好啦,本篇文章结束啦,想要学会priority_queue我还推荐大家去洛谷上面找相关题目去练习滴,加油哈!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。