相关疑难解决方法(0)

如何在STL priority_queue中进行有效的优先级更新?

我有一个对象的priority_queue:

typedef priority_queue<Object> Queue;
Queue queue;
Run Code Online (Sandbox Code Playgroud)

有时,其中一个对象的优先级可能会发生变化 - 我需要能够以有效的方式更新队列中该对象的优先级.目前我使用的方法虽然有效,但看起来效率低下:

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
Run Code Online (Sandbox Code Playgroud)

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

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

做这个的最好方式是什么?

c++ stl priority-queue

32
推荐指数
5
解决办法
3万
查看次数

标签 统计

c++ ×1

priority-queue ×1

stl ×1