我正在使用std::priority_queue
实现A *路径查找算法,但它没有按预期工作。我创建了一个快速模型,看看,因为队列在一个类中,这是问题所在。事实并非如此。工作得很好。
我在班级std::priority_queue
内有SNode
个班级AStarPrioQ
。节点有一个排序方法:
struct OverLoad
{
bool operator() (const SNode& lhs, const SNode& rhs) const
{
return (lhs.f > rhs.f);
}
};
priority_queue<SNode, vector<SNode>, OverLoad > wSet;
我想根据属性SNode::f
按升序排序。 {I}仅在我将其推入队列之前使用f
进行计算。
我将其添加到队列中:
SNode::CalcF(SNode goalPosition)
for (int i = 4; i < 8; i++)
{
tempPos = tempHead;
if (ValidMove(&tempPos, i))
{
tempPos.pathLength += 14;
tempPos.CalcF(goalPos);
wSet.push(tempPos);
}
}
根据方向ValidMove
生成移动,如果有效则返回i
。 <{1}}会在较大的while循环开始时从队列中弹出。
我不知道为什么我一直收到 Invalid Heap 错误,虽然它似乎出现在整个队列的值等于true
时。
希望我已经解释得很好了。如果没有,我可以上传项目,删除所有不相关的文件。