gpt4 book ai didi

c++是否有一种方法可以将优先级队列元素复制到 vector 中,以便可以对其进行迭代以检查重复项

转载 作者:搜寻专家 更新时间:2023-10-31 01:45:19 25 4
gpt4 key购买 nike

我第一次尝试用 C++ 编写 A* 搜索,但我以前用 Java 编写过。

我无法检查 openList 中是否已经存在某些内容。 OpenList 是 Node 的 priority_queue,但我知道您不能简单地遍历优先级队列。

我的想法是,我将 openList 传递给一个函数,该函数会将元素复制到一个临时 vector 中,然后我可以迭代这个临时 vector 。这显然不利于极其快速和高效的运行时间,但我想不出另一种解决方法。

封闭列表非常简单,如您所见,只需遍历 vector 即可。

这是两个列表:

priority_queue<Node, vector<Node>, NodeCompare> openList;
vector<Node> closedList;

代码:

bool checkInClosedList(std::vector<Node>& v,int x, int y){

for (std::vector<Node>::iterator iter = v.begin(); iter != v.end(); ++iter) {
if(iter->getX() == x && iter->getY() == y){
return true;
}
}

return false;

}

我该怎么做,但对于 priority_queue <Node, vector<Node>, NodeCompare>

优先级队列本身工作正常我已经测试过了,但是我的 A* 陷入了无限循环,因为它一直在检查它已经检查过的节点!

干杯,克里斯。

最佳答案

底层数据容器是一个 protected 成员std::priority_queue,因此您可以在派生类中访问它。如果你想添加前置条件或后置条件或不变量,这个是正确的解决方案;你派生你自己的类执行不变量。

关于c++是否有一种方法可以将优先级队列元素复制到 vector 中,以便可以对其进行迭代以检查重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22353888/

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