当我尝试将priority_queue与参数一起用作结构指针时,为什么会弹出错误

问题描述 投票:0回答:1

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

 }
c++ data-structures stl
1个回答
0
投票

您的代码有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

© www.soinside.com 2019 - 2024. All rights reserved.