我有一些对象的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
我以这种方式实现它是因为当时我有点着急,这是我能做的最快的事情,我可以肯定它会正常工作。不过,必须有比这更好的方法。我真正想要的是一种方法:
- 提取具有更改优先级的实例并插入具有新优先级值的新实例
- 使用更改的优先级更新实例,然后更新队列以使其正确排序
做这个的最好方式是什么?