priority_queue::priority_queue

explicit priority_queue(const Pred& pr = Pred(),
    const allocator_type& al = allocator_type());
priority_queue(const value_type *first, const value_type *last,
    const Pred& pr = Pred(), const allocator_type& al = allocator_type());

Both constructors store pr in comp and effectively initialize the stored object with c(al), to specify an empty initial controlled sequence. The template constructor then calls push(x) for x, an iterator of class InIt in the range [first, last).

In this implementation, if a translator does not support member template functions, the template:

template<class InIt>
    priority_queue(InIt first, InIt last,
        const Pred& pr = Pred(), const allocator_type& al = allocator_type());

is replaced by:

priority_queue(const value_type *first, const value_type *last,
    const Pred& pr = Pred(), const allocator_type& al = allocator_type());