В вашем коде есть 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));
}
Live Example