Почему выдается ошибка, когда я пытаюсь использовать priority_queue с параметрами в качестве указателя на структуру - PullRequest
0 голосов
/ 17 октября 2019

## Приоритетная очередь выдает ошибку с указателями. Когда я пытаюсь использовать структурные указатели в качестве параметра для очереди приоритетов и использую функцию компаратора, код выдает ошибку, но приоритет, кажется, работает нормально с объектами. ##

 #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.

 }

1 Ответ

2 голосов
/ 17 октября 2019

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

...