您的位置:首页 > 编程语言 > C语言/C++

【优先队列】STL之优先队列的使用方法

2014-03-07 21:11 711 查看
C++函数库中提供了以堆维持的优先队列。

这个队列就是一个最大 / 小堆。通过拿出堆顶来达到使用目的。

下面用几个示例来说明用法:

示例①——把一些数字从大到小输出。

#include <iostream>
#include <cstring>
#include <queue>
#include <vector>

using namespace std;

priority_queue<int> xx;

int main()
{
int n,num;
while(cin>>n)
{
while(!xx.empty())
xx.pop();
while(n--)
{
cin>>num;
xx.push(num);
}
while(!xx.empty())
{
cout<<xx.top()<<" ";
xx.pop();
}
cout<<endl;
}
return 0;
}


示例②——把一些数字从小到大输出。

#include <iostream>
#include <cstring>
#include <queue>
#include <vector>

using namespace std;

struct cmp
{
bool operator ()(const int &i,const int &j)
{
return i>j;
}
};

priority_queue<int,vector<int>,cmp> xx;

int main()
{
int n,num;
while(cin>>n)
{
while(!xx.empty())
xx.pop();
while(n--)
{
cin>>num;
xx.push(num);
}
while(!xx.empty())
{
cout<<xx.top()<<" ";
xx.pop();
}
cout<<endl;
}
return 0;
}

示例③——把一些结构体按其中某个元素从小到大输出。

#include <iostream>
#include <cstring>
#include <queue>
#include <vector>

using namespace std;

struct Node
{
int x,y;
};

struct cmp
{
bool operator ()(Node &a,Node &b)
{
return a.x>b.x;
}
};

priority_queue<Node,vector<Node>,cmp> xx;

int main()
{
int n;
Node node;
while(cin>>n)
{
while(!xx.empty())
xx.pop();
while(n--)
{
cin>>node.x>>node.y;
xx.push(node);
}
while(!xx.empty())
{
Node temp=xx.top();
xx.pop();
cout<<temp.x<<" "<<temp.y<<endl;
}
}
return 0;
}


运算符的重载:

struct node{
int x, y;
bool operator<(const node&a) const
{ if(a.x==x) return a.y<y; return a.x<x; } //根据x,y值比较node结构体的大小
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ STL