c++ STL. greater<>问题

自己写了结构体node,在node中重载了(),priority_queue<node,vector<node>,greater<node>>q;就是不行。网上说grea... 自己写了结构体node,在node中重载了(),
priority_queue<node,vector<node>,greater<node> > q;就是不行。网上说greater<>只能用简单类型int神马的,node都重载了为啥不让用?

已经被stl搞得头昏眼花了,求过来人指点迷津。
#include <queue>
#include <iostream>
#include <functional>
using namespace std;

struct node{
node* l;
node* r;
int ss;
bool operator> (node y) {return ss<y.ss?true:false;}
};

int main()
{
priority_queue<node,vector<node>,greater<node> > Q;
int n;cin>>n;
for(int i=0;i<n;++i) {
node t;t.ss=i;
Q.push(t);
}

while(!Q.empty()){
node x=Q.top();Q.pop();
cout<<x.ss<<" ";
}
cout<<endl;
char t;cin>>t;
return 0;
}
//存到手机上用手机粘贴过来的,家里没网真心没办法
展开
 我来答
houliang120450
推荐于2017-11-25 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:140
采纳率:0%
帮助的人:106万
展开全部
template <class _Tp>
struct greater : public binary_function<_Tp,_Tp,bool>
{
bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; }
};
上面是greater的定义,你注意里面用的是>符号,你的类型node必须支持符号>,所以你必须为你的node类型定义operator>函数
更多追问追答
追问
我试了,重载>也不行
追答
你重载的operator>函数需要const函数,因为你看
template
struct greater : public binary_function
{
bool operator()(const _Tp& __x, const _Tp& __y) const { return __x > __y; }
};
greater的定义中operator()的参数都是const类型,所以重载为
bool operator> (node y) const
{return ss (node x, node y) {return x.ss<y.ss?true:false;}
zjfaok
2014-02-09 · TA获得超过6807个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1630万
展开全部
greater<node>需要的不是node类定义了>运算符么,与()有什么关系……
更多追问追答
追问
我试过>也不行
追答
不肯说明白到底是怎样不行么……那我是懒得猜谜了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunchy12345678
2014-02-09 · TA获得超过665个赞
知道小有建树答主
回答量:443
采纳率:100%
帮助的人:346万
展开全部
重载()干什么。
更多追问追答
追问
试过>也不行,况且这还只是我实验写的代码,其实我是想用优先队列存node*
追答
这里通过了。可以把报错内容贴出来么。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式