I need to use Fibonacci heap in my project and I am trying to use it from boost library. But I cannot figure out how to set up a user defined compare function for arbitrary
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 nodes. 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";
}
}