Повысить ручку кучи до верхнего элемента - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть алгоритм, который по существу берет элементы типа T, помещает их в priority_queue, а затем берет верхний элемент очереди, модифицирует его, обновляет кучу, берет (возможно, новый) верхний элементи т. д.

Я бы хотел попробовать библиотеку Boost heap , чтобы заменить std :: priority_queue, чтобы избежать необходимости обновления на pop с последующим push изтот же элемент.Однако я не могу найти способ получить доступ к дескриптору в верхней части очереди, чтобы обновить его.

В частности, кажется, что есть только два способа получить дескриптор элемента:

  1. s_handle_from_iterator(it).Однако итератор, возвращаемый begin(), не обязательно является вершиной стека, и этот метод не принимает ordered_iterator, так что, похоже, мне не повезло?
  2. push(elem) возвращает дескриптор,Однако использование этого, по-видимому, означает, что я должен хранить дескриптор где-то, возможно, в самом элементе, что кажется пустой тратой пространства (и времени при обработке элементов).

Есть лилучший способ?

Обратите внимание, что для немного другого варианта использования (итерируя всю кучу по порядку) этот ответ , кажется, предполагает, что действительно нет лучшего способа ...

...