who could explain more about the compare function in priority queue C++ -
we define operator < people seem use class define operator ()?
how work.
i have learned generic thing in c before, @ time, use pointer function.
what difference?
basically, want code contain least amount of surprises.
let's have std::priority_queue<t> pq
class t
. t
class natural ordering exists? if so, define operator <
it. want pq
prioritised based on ordering? if so, let use operator <
, you're done.
however, quite often, t
class no intrinsic notion of ordering. imagine class employee
storing name
, startingdate
, salary
. there no universal ordering - given 2 employees, it's not clear 1 <
other.
at same time, may want std::priority_queue<employee>
based on earns most. or least. or who's company longest. therefore, you'll use specific comparators these.
in way, priority queue comparator , operator <
independent concepts. if have naturally orderable class, give operator <
. if want priority queue, give appropriate predicate. if predicate happens operator <
, let use that.
as why use class operator()
instead of pointer function, i'd primary reason typing , construction. class templates use comparators (such std::priority_queue
or std::map
) have type of comparator template parameter (they have no other option). then, when constructing container, have 2 options: provide object of comparator type, or let class create 1 default construction.
when type of comparator class (with default constructor, present these functor classes), constructor of std::priority_queue
can default-construct , work. if use function pointer, type of queue e.g. std::priority_queue<t, somecontainer, bool (*)(const t&, constt&)>
, , have pass appropriate function pointer each queue create.
Comments
Post a Comment