使用STL的priority_queue
只要我尝试使用pop()
,就会收到错误“invalid heap”。我可以将我的值推入队列,队列的top()
是我期望和可访问的。 pop()
,当它重新堆积时,似乎有问题。C++标准模板库优先级队列抛出带有消息“Invalid Heap”的异常
我正在存储指向队列中模板类的指针。我有重载的对比:
template <class type>
class vertexPriorityCompare
{
public:
bool operator()(Vertex<type>* leftVertex, Vertex<type>* rightVertex) const
{
if(leftVertex->getDistanceFromSource() < 0 && rightVertex->getDistanceFromSource() < 0)
{
return false;
}
else if(leftVertex->getDistanceFromSource() < 0)
{
return true;
}
else if(rightVertex->getDistanceFromSource() < 0)
{
return false;
}
else
{
return leftVertex->getDistanceFromSource() > rightVertex->getDistanceFromSource();
}
}
};
的priority_queue
是一类的私有成员:
priority_queue< Vertex<type>*, vector< Vertex<type>* >, vertexPriorityCompare<type> > Q;
在它时尚的超负荷工作,因为负的距离被认为是无穷大,总是大于不管怎么说;为了表示无穷大,距离被初始化为-1。队列需要保持最小值,但非负值。
我解引用重载中的指针,是我在那里允许的吗?而且,是否还有另一个运营商需要超载?
我会附上代码,但看起来如果我这样做,它会吓跑人们。要求看更多,我会附加到另一条消息。
我动态地声明了一个指向指针的数组,这些是被推入的东西,因为我认为priority_queue
是通过引用存储的,所以如果我只是把循环中声明的指针放入队列中,那么这个指针会超出范围。这些指针指向正确的Vertex<type>
,并存在于整个函数中。
Visual Studio 2008中调试带我到“stdthrow.cpp”线路24
请格式化您的代码 – cbrulak 2009-01-23 22:17:15
Visual Studio调试器也应该为您提供一个调用堆栈。这可能也有帮助。 – MSN 2009-01-23 22:24:37