Я использую boost::fibonacci_heap
класс из Boost 1.53.0 для поддержки обновляемой очереди приоритетов.
Когда я хочу обновить элемент, мне нужно сравнить элемент в куче с новым элементом, которым я хочу заменить его. Я только хочу заменить элементы в куче «меньшими» версиями, поэтому я хочу сравнить их перед обновлением.
Когда я вставляю элементы я сохраняю их дескриптор (boost::fibonacci_heap::handle_type
). Все функции, которые я видел в документация для fibonacci_heap
которые принимают тип дескриптора, предоставляют только некоторый доступ для записи (update()
, decrease()
, increase()
и т.д.) и не позволяйте мне проверять элемент, идентифицированный дескриптором, прежде чем я обновлю его.
Есть ли способ посмотреть на элемент в fibonacci_heap
используя только его дескриптор?
Вы должны иметь возможность разыменовать ручку. Пример этого приведен здесь:
http://www.boost.org/doc/libs/1_50_0/doc/html/heap/concepts.html
Пример с сайта
fibonacci_heap<heap_data> heap;
heap_data f;
fibonacci_heap<heap_data>::handle_type handle = heap.push(f);
(*handle).handle = handle; // store handle in node
Так просто позвони
(*handle)
чтобы получить ссылку на ваш класс, хранящийся в куче.
Других решений пока нет …