У меня есть 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
Я реализовал его таким образом, потому что в то время я был в спешке, и это было самое быстрое, что я мог сделать, чтобы быть уверенным, что все будет хорошо. Однако должен быть лучший способ, чем это сделать. На самом деле то, что я хочу, - это способ:
- извлеките экземпляр с измененным приоритетом и вставьте новый с новым значением приоритета
- обновить экземпляр с измененным приоритетом и затем обновить очередь, чтобы он был правильно отсортирован
Каков наилучший способ сделать это?