## Priority Queue使用指针引发错误。当我尝试将结构指针用作优先级队列的参数并使用比较器功能时,代码给出了错误,但优先级似乎可以很好地与对象配合使用。 ##
#include<bits/stdc++.h>
using namespace std;
struct data
{
int cost;
int node;
int k;
data(int a,int b,int c):cost(a),node(b),k(c){};
};
struct cmp
{
bool operate(data *p1,data *p2)
{
return p1->cost<p2->cost;
}
};
int main ()
{
priority_queue<data*,vector<data*>,cmp> pq;
pq.push(new data(0,2,3)); //This line throws an error stating ( required from here) and there is nothing written before required.
}
您的代码有3处错误:
1]在C ++ 17中存在一个std::data,但是在声明struct data
之前您有一个using namespace std;
,并加上了struct data
。这可能会导致命名冲突。
2)函数调用运算符为operator()
,而不是operate
。
3)您正在使用可怕的#include <bits/stdc++.h>
,它不仅是非标准的,还会导致与上述项目1)有关的各种问题。
这是您的代码,可以解决上述所有这些问题:
#include <vector>
#include <queue>
struct data
{
int cost;
int node;
int k;
data(int a,int b,int c):cost(a),node(b),k(c){};
};
struct cmp
{
bool operator()(data *p1,data *p2)
{
return p1->cost < p2->cost;
}
};
int main ()
{
std::priority_queue<data*, std::vector<data*>,cmp> pq;
pq.push(new data(0,2,3));
}