gpt4 book ai didi

c++ - 将结构插入集合 C++ 时遇到问题

转载 作者:行者123 更新时间:2023-11-28 05:24:03 26 4
gpt4 key购买 nike

我正在研究 A* 寻路算法,但在将名为节点的结构插入集合中时遇到错误。错误内容为:“错误 1 ​​error C2678: binary '<' : no operator found which takes a left-hand operand of type 'const node' (or there is no acceptable conversion)”但在另一个文件 'XSTDDEF 中发现错误' 我还没有看过。我不确定这意味着什么。

struct node{
int f;
int g;
int h;
int x;
int y;
};

node coords[24] = { -1 };

std::set<node> open;
std::set<node> closed;

int main(int argc, char *argv[]){
coords[4].g = 0;
coords[4].h = heuristic(start, end, start.h);
coords[4].f = start.g + start.h;
coords[4].x = 4;
coords[4].y = 0;

open.insert(coords[4]);

最佳答案

如果您熟悉 std::set 的文档,您可能会知道,它是一个有序的容器。因此必须有一种方法来比较集合的元素,以便可以对它们进行排序。从文档中,我们知道 std::set 的默认比较仿函数是std::less<T> .

此外,如您所知,std::less<T>做:

Unless specialized, invokes operator< on type T.

std::less不专门用于 node , 它使用 operator< .

错误消息告诉您 operator< 的过载不存在 const node (或 node 可以转换成的任何东西)作为左操作数。

解决方案是定义这样的重载。

关于c++ - 将结构插入集合 C++ 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40914705/

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