priority_queue队列问题,如何指定自己的优先级?

luo6620378xu 2009-04-18 09:39:54
例如我定义了一个如下的结构体;

struct Node
{
int frequery;
int tr;
bool operator < (const Node &a) const
{
return (frequery<a.frequery);
}//我想自己去重载,编译器报错
};

int main()
{
priority_queue< Node> q;

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;


return 0;
}

它默认的是按照frequery的降序输出的,我想要它按照升序输出。该怎编码?
...全文
348 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mailczl 2009-07-09
  • 打赏
  • 举报
回复
可是一直想寻找如何遍历priority_queue的方法,都没有找到呢
hityct1 2009-04-19
  • 打赏
  • 举报
回复
二楼方法也可,不过需要改一下。

#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;
/*bool operator() (const Node& lhs, const Node& rhs) const
{
return (lhs.frequery > rhs.frequery);
}*/

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()
{
//示例一
{
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;
}

//示例二
{
priority_queue < Node, vector<Node>, node_greater_comp > q; //仿函数node_greater_comp是比较规则

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;
}

return 0;
}
hityct1 2009-04-19
  • 打赏
  • 举报
回复

#include <iostream>
//#include <sstream>
//#include <cassert>
//#include <windows.h>
#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;
/*bool operator() (const Node& lhs, const Node& rhs) const
{
return (lhs.frequery > rhs.frequery);
}*/

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

int main()
{
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;


return 0;
}
xuhb95083023 2009-04-18
  • 打赏
  • 举报
回复
把operator<去掉


// 函数对象
struct node_comp {
bool operator()(const node& lhs, const node& rhs) const {
return lhs.frequery < rhs.frequery;
}
}

// 声明方法
std::prior_queue<node, node_comp> my_prior_queue;
luo6620378xu 2009-04-18
  • 打赏
  • 举报
回复
自己顶!

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧