Defining compare function for fibonacci heap in boost

前端 未结 1 961
执笔经年
执笔经年 2021-01-13 09:02

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

相关标签:
1条回答
  • 2021-01-13 09:52

    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";
        }
    }
    
    0 讨论(0)
提交回复
热议问题