将堆栈对象存储在优先级队列中

时间:2013-04-08 19:12:12

标签: c++ stl

我有一个对象

priority_queue<SState,vector<SState>,greater<SState> > m_queue;

这是一个类的成员,其中SState是一个定义

的内部结构
struct SState
{
    SState(int p, int b):priority(p),bbb(b){}
    ~SState(){}
    int priority;
    int bbb;
};

和比较器

inline bool operator > (const MyClass::SState& left, const MyClass::SState& right)
{
   return left.priority > right.priority;
}

我有一个创建SState对象的方法。

m_queue.push(SState(p,b));

以及其他方法

if (!m_queue.empty())
{

      const SState& state = m_queue.top();
      ...
      m_queue.pop();

}

我有一堆腐败。 怎么做对了?

2 个答案:

答案 0 :(得分:0)

您的问题可能是您在致电state后使用m_queue.pop();,导致访问对不再存在的项目的引用。您需要稍后将pop调用移动到该函数中,或者在从堆栈中获取该项后对其进行复制。

答案 1 :(得分:0)

const SState& state = m_queue.top();

你有参考堆栈对象的堆副本。但是这个引用并没有延长对象的生命周期。

所以

  m_queue.pop();

对象正在破坏,你不能再使用它了。