使用 STLpriority_queue
时,我一尝试使用pop()
. 我可以将我的值推送到队列中,top()
队列的值是我所期望和可访问的。pop()
,当它去重新堆时,似乎有问题。
我在队列中存储指向模板类的指针。我有比较重载:
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 行。