admin管理员组

文章数量:1623791


头文件是#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小堆顶