c++ 如何在STL priority_queue中执行高效的优先级更新?

我有一个对象的priority_queue:

typedef priority_queue<Object> Queue;
Queue queue;

有时候,其中一个对象的优先级可能会改变 – 我需要能够以有效的方式更新队列中该对象的优先级。目前我正在使用这种方法,但似乎效率不高:

Queue newQueue;
while (!queue.empty())
{
  Object obj=queue.top();
  queue.pop();

  if (priorityHasChanged(obj))
    newQueue.push_back(Object(new_priority));
  else
    newQueue.push_back(obj);
}

newQueue.swap(queue); // this only works because I actually subclassed the priority_queue
                 // class and exposed a swap method that swaps in the container

我以这种方式实现了这一点,因为我当时很匆忙,这是我能做的最快的事情,我可以确定它会工作正常。必须有比这更好的办法。真的我想要的是一种方式:

>提取具有更改优先级的实例,并插入一个新的优先级值
>使用更改的优先级更新实例,然后更新队列,使其正确排序

这样做最好的方法是什么?

我认为你不符合标准的优先级队列,因为你无法获得底层的deque / vector / list或者其他任何东西。你需要实现自己 – 这不是很难。
http://stackoverflow.com/questions/649640/how-to-do-an-efficient-priority-update-in-stl-priority-queue

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c++ 如何在STL priority_queue中执行高效的优先级更新?