Description

Pop_heap removes the largest element (that is, *first) from the
heap [1][first, last).
The two versions of pop_heap differ in how they define whether one
element is less than another. The first version compares
objects using operator<, and the second compares objects using a
function objectcomp.

The postcondition for the first version of pop_heap is that
is_heap(first, last-1) is true and that *(last - 1) is the
element that was removed from the heap.
The postcondition for the second version is that
is_heap(first, last-1, comp) is true and that *(last - 1) is the
element that was removed from the heap. [2]

Definition

Defined in the standard header algorithm, and in the nonstandard
backward-compatibility header algo.h.

Notes

[1]
A heap is a particular way of ordering the elements in a range of
Random Access Iterators[f, l). The reason heaps are useful
(especially for sorting, or as priority queues) is that they satisfy
two important properties. First, *f is the largest element in the
heap. Second, it is possible to add an element to a heap (using
push_heap), or to remove *f, in logarithmic time.
Internally, a heap is a tree represented as a sequential range.
The tree is constructed so that that each
node is less than or equal to its parent node.

[2]Pop_heap removes the largest element from a heap, and shrinks the heap.
This means that if you call keep calling pop_heap until only
a single element is left in the heap, you will end up with a sorted
range where the heap used to be. This, in fact, is exactly how
sort_heap is implemented.