¿Cómo atravesar ordenadamente una cola de prioridad Boost.Heap y actualizar un elemento dado?

Estoy buscando una buena estructura de datos que puedamantener Sus elementos ordenados. Actualmente estoy tratandoBoost.Heap.

Con frecuencia necesito atravesar ordenadamente la estructura de datos y, al llegar a un elemento basado en alguna propiedad, actualizar su prioridad. Las colas de prioridad Boost.Heap proporcionan iteradores ordenados y no ordenados. Las actualizaciones de elementos se producen a través de un identificador de nodo, se puede obtener un identificador de un iterador ordinario no ordenado, pero no directamente de uno ordenado como en el siguiente ejemplo:

#include <iostream>
#include <algorithm>
#include <boost/heap/fibonacci_heap.hpp>

using namespace boost::heap;

int main()
{
    fibonacci_heap<int> fib_heap;

    fib_heap.push(1);
    fib_heap.push(2);
    fib_heap.push(3);

    for(auto i = fib_heap.ordered_begin(); i != fib_heap.ordered_end(); ++i)
    {
        // no viable conversion here
        auto h = fibonacci_heap<int>::s_handle_from_iterator(i);

        if(*h == 2) // dumb test
        {
            fib_heap.increase(h, *h + 2);
            break;
        }
    }

    std::for_each(fib_heap.ordered_begin(), fib_heap.ordered_end(),
    [](const int &e)
    {
        std::cout << e << std::endl;
    });
}

¿Cómo puedo ordenar ordenadamente la cola y actualizar un elemento en el recorrido?

Tenga en cuenta que dejo el recorrido después de la actualización.

(Las sugerencias de bibliotecas alternativas para tal fin son bienvenidas)

Respuestas a la pregunta(2)

Su respuesta a la pregunta