Мне нужно обработать максимальную кучу (используемую в качестве приоритетной очереди) таким образом, что я извлекаю верхний элемент, вычитаю неопределенное число и затем снова помещаю этот измененный элемент. Я мог бы сделать это, используя только pop_heap и push_heap, но это требует ненужной работы, поскольку приходится дважды изменять кучу, каждый раз заново устанавливая инвариант кучи:
Код: Выделить всё
std::vector heap;
// ...
std::pop_heap(heap.begin(), heap.end()); // Re-establishes heap invariant.
decrease(heap.back());
std::push_heap(heap.begin(), heap.end()); // Re-establishes heap invariant again.
Код: Выделить всё
decrease(heap.front()); // Modify in-place.
replace_heap(heap.begin(), heap.end());
Подробнее здесь: https://stackoverflow.com/questions/326 ... g-heap-inv
Мобильная версия