C ++中的优先级队列运算符错误
Prioirty Queue operator error in C++
我正在尝试将 struct node
s 的一部分插入到基于比较函数的优先级队列中,如以下代码段所示。
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;
}
我正在尝试将 struct node
s 的一部分插入到基于比较函数的优先级队列中,如以下代码段所示。
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;
}