STL priority_queue。所有项目相同时无效的堆

时间:2011-11-03 03:47:38

标签: c++ stl heap priority-queue

我正在使用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时。

希望我已经解释得很好了。如果没有,我可以上传项目,删除所有不相关的文件。

0 个答案:

没有答案