您的位置:首页 > 其它

优先队列的用法

2009-09-20 11:16 323 查看
#include "stdafx.h"

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

using namespace std;

//看看priority_queue的声明,模板的第三个参数就是比较规则,规则可以是个函数,也可是个仿函数
//template < class T, class Container = vector<T>,
//           class Compare = less<typename Container::value_type> > class priority_queue;
struct Node
{
int frequery;
int tr;

friend bool operator> (const Node& lhs, const Node& rhs)
{
return (lhs.frequery > rhs.frequery);
}
};

struct node_greater_comp {

bool operator()(const Node& lhs, const Node& rhs) const
{
return lhs.frequery > rhs.frequery;
}
};

int main()
{
//示例0
{
priority_queue<int,vector<int>,less<int>> q;//改成greater<int>则为最小堆,默认情况下为最大堆
q.push(24);
q.push(12);
q.push(35);
while(!q.empty())
{
cout <<q.top() <<" ";
q.pop();
}
cout<<endl;

}
//示例一
{
priority_queue < Node, vector<Node>, greater<Node> >  q; //仿函数greater中用到operator>

Node w[10];
w[0].frequery=12;
w[1].frequery=32;
w[2].frequery=34;

q.push(w[0]);
q.push(w[1]);
q.push(w[2]);

while(!q.empty())
{
cout <<q.top().frequery <<" ";
q.pop();
}
cout <<endl;
}

//示例二
{
Node w[3];
w[0].frequery=12;
w[1].frequery=32;
w[2].frequery=34;

priority_queue < Node, vector<Node>, node_greater_comp >  q(w,w+3); //仿函数node_greater_comp是比较规则

while(!q.empty())
{
cout <<q.top().frequery <<" ";
q.pop();
}
cout <<endl;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: