我有一个像这样的priority_queue,而不是使用less比较(priority_queue的默认值)。我想使用更大的<>。所以我像这样调整代码
priority_queue<EncodingNode*, vector<EncodingNode*>, greater<Comparator>> pq;
这是我的EncodingNode的定义
class EncodingNode
{
public:
char c;
int freq;
int priority;
};
这是我的比较器类:
struct Comparator
{
bool operator()(const EncodingNode* a, const EncodingNode* b);
};
bool Comparator::operator()(const EncodingNode* a, const EncodingNode* b)
{
// logic for comparing two EncodingNode*
if (a->freq > b->freq)
return true;
else if (a->freq == b->freq)
{
if (a->priority > b->priority)
return true;
}
return false;
}
它一直给我这个错误:无法将参数 1 从 'EncodingNode *' 转换为 'const_Ty &' 无论如何,有没有办法解决这个问题,如果我删除代码的大部分,它会运行,但不使用更大的<>,我必须以某种方式否定比较器内的条件并给出错误的结果。在这种情况下是否可以使用更大的<>。非常感谢。
std::greater
将 (x, y)
转换为 x > y
,因为 Comparator
没有实现 >
运算符 greater<Comparator>
无法编译。在这种情况下你不需要std::greater
,你只需直接传递比较器即可:
priority_queue<EncodingNode*, vector<EncodingNode*>, Comparator> pq;
请注意,您的比较器可以简化为:
bool Comparator::operator()(const EncodingNode* a, const EncodingNode* b)
{
return std::tie(a->freq, a->priority) > std::tie(b->freq, b->priority);
}