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;
}
//存到手机上用手机粘贴过来的,家里没网真心没办法 展开
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;
}
//存到手机上用手机粘贴过来的,家里没网真心没办法 展开
展开全部
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>函数
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;}
展开全部
greater<node>需要的不是node类定义了>运算符么,与()有什么关系……
更多追问追答
追问
我试过>也不行
追答
不肯说明白到底是怎样不行么……那我是懒得猜谜了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
重载()干什么。
更多追问追答
追问
试过>也不行,况且这还只是我实验写的代码,其实我是想用优先队列存node*
追答
这里通过了。可以把报错内容贴出来么。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询