fibonacci_heap
takes a comparison functor, which is effectively a struct
or class
with a function call operator - operator()
. I'm going to simplify your node
struct, but you should be able to use this with minor modifications:
struct node
{
int id;
node(int i)
: id(i)
{ }
};
Now, we need to define a class that compares node
s. This will have an operator()
that takes 2 nodes by const reference, and return a bool
:
struct compare_node
{
bool operator()(const node& n1, const node& n2) const
{
return n1.id > n2.id;
}
};
We can then declare our heap as follows:
boost::heap::fibonacci_heap<node, boost::heap::compare<compare_node>> heap;
A full example:
#include <boost/heap/fibonacci_heap.hpp>
#include <iostream>
struct node
{
int id;
node(int i)
: id(i)
{ }
};
struct compare_node
{
bool operator()(const node& n1, const node& n2) const
{
return n1.id > n2.id;
}
};
int main()
{
boost::heap::fibonacci_heap<node, boost::heap::compare<compare_node>> heap;
heap.push(node(3));
heap.push(node(2));
heap.push(node(1));
for(const node& n : heap) {
std::cout << n.id << "\n";
}
}