我想构造两个具有不同比较方法的优先级队列(有两个反向优先级方法名为 cmp1 和 cmp2) 我的程序无法通过编译器检查,为什么会出现这样的错误,有没有更好的解决办法?
#include <iostream>
#include <queue>
#include <string>
using namespace std;
struct item
{
string name;
string sex;
string id;
double score;
friend istream& operator >> (istream &is,item& data)
{
is>>data.name>>data.sex>>data.id>>data.score;
}
/*friend bool operator < (item& a,item& b)
{
return a.score<b.score;
}*/
};
struct cmp1{
operator bool()(item& x,item& y)
{
return x.score>y.score;
}
};
struct cmp2
{
operator bool()(item& x,item& y)
{
return x.score<y.score;
}
};
int main()
{
priority_queue<item,vector<item>,cmp1> boys;
priority_queue<item,vector<item>,cmp2>girls;
item temp;
int num;
cin>>num>>temp;
for(int i=0;i<num;i++)
{
if(temp.sex=="M")
boys.push(temp);
else
girls.push(temp);
}
return 0;
}
最佳答案
我将对这个问题进行大胆的猜测……您的比较仿函数不正确。您需要重载函数调用运算符,而不是重载 operator bool
,即
struct cmp1{
bool operator()(const item& x, const item& y)
{
return x.score>y.score;
}
};
struct cmp2
{
bool operator()(const item& x, const item& y)
{
return x.score<y.score;
}
};
(也许这是您的本意,只是语法有点错误?)
关于c++ - c++中STL的priority_queue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20091422/