I want to have a priority queue with custom ordering, but lazy as I am, I don't want to define a comparator class implementing operator().
I really would like something like this to compile:
std::priority_queue<int, std::vector<int>,
boost::bind(some_function, _1, _2, obj1, obj2)> queue;
where some_function is a bool returning function taking four arguments, the first and second being ints of the queue, and the two last ones some objects needed for calculating the ordering (const references).
(error: ‘boost::bind’ cannot appear in a constant-expression)
But this doesn't compile. Even a more simple
std::priority_queue<int, std::vector<int>, &compare> queue;
won't compile, with compare being a binary function returning bool.
(error: type/value mismatch at argument 3 in template parameter list for ‘template class std::priority_queue’; expected a type, got ‘compare’)
Any suggestions?
This could work:
std::priority_queue<int, std::vector<int>,
boost::function<bool(int,int)> >
Then pass in your bind expression to the queue's constructor.
P.S. you're getting those compilation errors because you're putting runtime-evaluated expressions where a typename or constant expression are expected.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With