C ++中的优先级队列运算符错误

Prioirty Queue operator error in C++

我正在尝试将 struct nodes 的一部分插入到基于比较函数的优先级队列中,如以下代码段所示。

struct node
{
    string line;
    int length;
};

struct Pair
{
    node first,second;
};

struct Compare
{
    bool operator()( const Pair* p1,  const Pair* p2)
    {
        return p1->first.length > p2->first.length;
    }
};

int main()
{
    ...
    priority_queue<Pair*, vector<Pair*>, Compare> PairsQ;
    ...
}

我在其他几行类似的行中收到以下错误。

error: no match for ‘operator<’ (operand types are ‘const Pair’ and ‘const Pair’) { return __x < __y; }

有什么解决办法?为什么我已经定义了比较函数,但仍会看到此错误。

std::queue 等 STL 容器提供比较函数时,您的 operator() 函数应具有以下签名:

bool operator()(const Pair& p1, const Pair& p2)

然后(部分)您的程序会喜欢(我已将类型从 Pair* 更改为 Pair,因为您评论说这不是这里的要求):

#include <string>
#include <queue>

using namespace std;

struct node {
    string line;
    int length;
};

struct Pair {
    node first, second;
};

struct Compare {
    bool operator()(const Pair& p1, const Pair& p2) {
        return p1.first.length > p2.first.length;
    }
};

int main() {
    priority_queue<Pair, vector<Pair>, Compare> PairsQ;
}