У меня есть алгоритм, который по существу берет элементы типа T
, помещает их в priority_queue
, а затем берет верхний элемент очереди, модифицирует его, обновляет кучу, берет (возможно, новый) верхний элементи т. д.
Я бы хотел попробовать библиотеку Boost heap , чтобы заменить std :: priority_queue, чтобы избежать необходимости обновления на pop
с последующим push
изтот же элемент.Однако я не могу найти способ получить доступ к дескриптору в верхней части очереди, чтобы обновить его.
В частности, кажется, что есть только два способа получить дескриптор элемента:
s_handle_from_iterator(it)
.Однако итератор, возвращаемый begin()
, не обязательно является вершиной стека, и этот метод не принимает ordered_iterator
, так что, похоже, мне не повезло? push(elem)
возвращает дескриптор,Однако использование этого, по-видимому, означает, что я должен хранить дескриптор где-то, возможно, в самом элементе, что кажется пустой тратой пространства (и времени при обработке элементов).
Есть лилучший способ?
Обратите внимание, что для немного другого варианта использования (итерируя всю кучу по порядку) этот ответ , кажется, предполагает, что действительно нет лучшего способа ...