Steven Morad Steven Morad - 19 days ago 6
C++ Question

declaring a priority_queue in c++ with a custom comparator

I'm trying to declare a

priority_queue of nodes
, using
bool Compare(Node a, Node b)
as the comparator function (which is outside the node class).

What I currently have is:

priority_queue<Node, vector<Node>, Compare> openSet;


For some reason, I'm getting
Error: "Compare" is not a type name


Changing the declaration to
priority_queue <Node, vector<Node>, bool Compare>


gives me
Error: expected a '>'


I've also tried:

priority_queue<Node, vector<Node>, Compare()> openSet;
priority_queue<Node, vector<Node>, bool Compare()> openSet;
priority_queue<Node, vector<Node>, Compare<Node, Node>> openSet;


How should I correctly declare my
priority_queue
?

Answer

You should declare a class Compare and overload operator() for it like this:

class Foo
{

};

class Compare
{
public:
    bool operator() (Foo, Foo)
    {
        return true;
    }
};

int main()
{
    std::priority_queue<Foo, std::vector<Foo>, Compare> pq;
    return 0;
}

Or, if you for some reasons can't make it as class, you could use std::function for it:

class Foo
{

};

bool Compare(Foo, Foo)
{
    return true;
}

int main()
{
    std::priority_queue<Foo, std::vector<Foo>, std::function<bool(Foo, Foo)>> pq(Compare);
    return 0;
}
Comments