使用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