Я почти уверен, что нет никакого стандартного способа сделать это - Википедия тоже так говорит :
нет стандартной поддержки клавиши уменьшения / увеличенияоперация
Несмотря на то, что она продолжает указывать на библиотеку gheap
, на которую вполне стоит обратить внимание.
Проблема в том, что стандарт не предписывает какую формуструктура кучи не принимает ни того, как именно выполняются операции.(В общем, это хорошо.)
Если реализация использует стандартную двоичную кучу, тогда я думаю, что вы можете просто уменьшить элемент на heap[i]
и затем вызвать push_heap(heap.begin(), heap.begin() + i + 1)
, что сделает необходимоеоперация поднятия кучи.Элемент, который заканчивается в позиции i
, должен быть не больше первоначального значения, поэтому свойство кучи всей кучи сохраняется.Но это не поддерживается стандартом, даже если он иногда работает в некоторых реализациях.