首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

priority_queue兑现最小堆和最大堆

2012-09-06 
priority_queue实现最小堆和最大堆注意:即使最小堆中元素为基本类型(如,int),也不能直接声明priority_queu

priority_queue实现最小堆和最大堆

注意:

即使最小堆中元素为基本类型(如,int),也不能直接声明

priority_queue<int>qmax;

因为,priority_queue<int>默认按照 < 运算符 的定义比较堆中的元素,并且默认是堆的根部为 <运算符 比较得到的最大元素 (即默认最大堆实现)。

?

为了简化实现,只要记住统一将 堆中元素设置为自定义的struct即可!

?

#include<iostream>#include<queue>using namespace std;struct MAX{    int x;}t;struct MIN{    int x;}s;bool operator<(const MAX &a,const MAX &b){    return a.x<b.x;}//大根堆bool operator<(const MIN &a,const MIN &b){    return a.x>b.x;}//小根堆priority_queue<MAX>qmax;priority_queue<MIN>qmin;int a,n,i;int main(){    cout<<"输入n"<<endl;    cin>>n;    cout<<"输入n个数"<<endl;    for(i=1;i<=n;i++)    {        cin>>a;        t.x=a;        qmax.push(t);        s.x=a;        qmin.push(s);    }    while(!qmax.empty())    {        a=qmax.top().x;        cout<<a<<" ";        qmax.pop();    }    cout<<endl;    while(!qmin.empty())    {        a=qmin.top().x;        cout<<a<<" ";        qmin.pop();    }    cout<<endl;    system("pause");    return 0;}

热点排行