admin管理员组文章数量:1624351
头文件是#include
关于priority_queue中元素的比较
模板申明带3个参数:priority_queue<Type, Container, Functional>,其中Type 为数据类型,Container为保存数据的容器,Functional 为元素比较方式。
默认的顺序为less,堆顶为最大值
如果想堆顶为最小值,则greater替换,并包含头文件#include ,且三个参数全部要写出来
例子:
1.降序输出
#include <iostream>
#include <queue>
using namespace std;
int main(){
priority_queue<int> q;
for( int i= 0; i< 10; ++i ) q.push(i);
while( !q.empty() ){
cout<<q.top()<<endl;
q.pop();
}
return 0;
}
2.升序输出
#include <iostream>
#include <queue>
#include <functional>
using namespace std;
int main(){
priority_queue<int, vector<int>, greater<int> > q;
for( int i= 0; i< 10; ++i ) q.push(10-i);
while( !q.empty() ){
cout << q.top() << endl;
q.pop();
}
return 0;
}
3.针对pair类型的堆
以下代代码返回pair的比较结果,先按照pair的first元素降序,first元素相等时,再按照second元素降序
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int main(){
priority_queue<pair<int,int> > coll;
pair<int,int> a(3,4);
pair<int,int> b(3,5);
pair<int,int> c(4,3);
coll.push(c);
coll.push(b);
coll.push(a);
while(!coll.empty())
{
cout<<coll.top().first<<"\t"<<coll.top().second<<endl;
coll.pop();
}
return 0;
}
4.以下代代码返回pair的比较结果,先按照pair的first元素升序,first元素相等时,再按照second元素升序:
#include<iostream>
#include<vector>
#include<queue>
#include <functional>
using namespace std;
int main(){
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > coll;
pair<int,int> a(3,4);
pair<int,int> b(3,5);
pair<int,int> c(4,3);
coll.push(c);
coll.push(b);
coll.push(a);
while(!coll.empty())
{
cout<<coll.top().first<<"\t"<<coll.top().second<<endl;
coll.pop();
}
return 0;
}
自定义比较函数及更多详细内容查看链接,如涉及版权,请联系后删除,谢谢
转载自:https://wwwblogs/Deribs4/p/5657746.html
本文标签: 大堆priorityqueue小堆顶
版权声明:本文标题:C++:priority_queue大堆顶和小堆顶 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1728897450a1178594.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论