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

Why is an error popping out when i am trying to use priority_queue with parameters as pointer to a structure

本文关键字:结构 指针 出错 错误 priority 一起 参数 queue 为什么      更新时间:2023-10-16

>## 优先级队列会抛出指针错误。当我尝试使用结构指针作为优先级队列的参数并使用比较器函数时,代码给出了错误,但优先级似乎适用于对象。##

#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::d ata,但是您在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)); 
}

现场示例