gpt4 book ai didi

c++ - 为什么当我尝试使用带有参数的 priority_queue 作为指向结构的指针时会弹出错误

转载 作者:行者123 更新时间:2023-11-28 01:16:52 25 4
gpt4 key购买 nike

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

 #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) 有一个 std::data存在于 C++ 17 中,但你有一个 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

关于c++ - 为什么当我尝试使用带有参数的 priority_queue 作为指向结构的指针时会弹出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58423310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com