A heap - это особая организация элементов в диапазоне между двумя итераторами произвольного доступа, [a, b) такая что:
СN = b - a, для всехi,0<i<N, comp(a[⌊i−12⌋], a[i]) естьfalse.
*a может быть удалено pop_heap(), или новый элемент добавляет push_heap()в O(logN) время.
make_heap() преобразует диапазон в кучу и sort_heap() превращает кучу в отсортированную последовательность.
template<class RandomAccessIterator>
void push_heap(RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
void push_heap(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
Requires: Диапазон [first, last - 1) должен быть допустимой кучей. Тип*first должен удовлетворятьMoveConstructible requirements и MoveAssignable requirements.
template<class RandomAccessIterator>
void pop_heap(RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
void pop_heap(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
Requires: Диапазон [first, last) должен быть действительной непустой кучей. RandomAccessIterator должны удовлетворять требованиям ValueSwappable. Тип*first должен удовлетворять требованиям MoveConstructible и MoveAssignable.
Effects: Меняет местами значение в местоположенииfirst со значением в местоположении last - 1 и превращается [first, last - 1) в кучу.
template<class RandomAccessIterator>
void make_heap(RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
void make_heap(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
Requires: Тип*first должен удовлетворятьMoveConstructible requirements и MoveAssignable requirements.
template<class RandomAccessIterator>
void sort_heap(RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
void sort_heap(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
Requires: Диапазон[first, last) должен быть допустимой кучей. RandomAccessIterator должны удовлетворять требованиям ValueSwappable. Тип*first должен удовлетворять требованиям MoveConstructible и MoveAssignable.
template<class RandomAccessIterator>
bool is_heap(RandomAccessIterator first, RandomAccessIterator last);
template<class ExecutionPolicy, class RandomAccessIterator>
bool is_heap(ExecutionPolicy&& exec,
RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
bool is_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp);
template<class ExecutionPolicy, class RandomAccessIterator, class Compare>
bool is_heap(ExecutionPolicy&& exec,
RandomAccessIterator first, RandomAccessIterator last, Compare comp);
template<class RandomAccessIterator>
RandomAccessIterator is_heap_until(RandomAccessIterator first, RandomAccessIterator last);
template<class ExecutionPolicy, class RandomAccessIterator>
RandomAccessIterator is_heap_until(ExecutionPolicy&& exec,
RandomAccessIterator first, RandomAccessIterator last);
template<class RandomAccessIterator, class Compare>
RandomAccessIterator is_heap_until(RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
template<class ExecutionPolicy, class RandomAccessIterator, class Compare>
RandomAccessIterator is_heap_until(ExecutionPolicy&& exec,
RandomAccessIterator first, RandomAccessIterator last,
Compare comp);
Returns: Если(last - first) < 2, вернется last. В противном случае, возвращает последний итераторi в[first, last] течение которого диапазон[first, i) является пирамидой.