На ваш прямой вопрос ответит класс по алгоритмам и структурам данных. Кучи повсеместно используются в алгоритмах информатики. Процитируем из функции make_heap, связанной ниже, «куча - это дерево, где каждый узел ссылается на значения, не превышающие его собственного значения». Хотя существует множество приложений для кучи, наиболее часто используемое мной относится к проблемам поиска, когда вы хотите эффективно отслеживать отсортированный список из N значений.
У меня была такая же путаница, как и у вас, когда я впервые столкнулся с функциями кучи STL. Мой вопрос был немного другим, хотя. Я задавался вопросом "Почему куча STL не находится в том же классе структур данных, что и std :: vector?" Я думал, что это должно работать так:
std::heap< int > my_heap;
my_heap.heap_insert( 7 );
my_heap.heap_insert( 3 );
Идея, лежащая в основе функций кучи STL, заключается в том, что они позволяют создавать структуру данных кучи из нескольких различных лежащих в основе контейнеров STL, включая std :: vector. Это может быть очень полезно, если вы хотите передать контейнер для использования в других местах ваших программ. Это также немного приятно, потому что вы можете выбрать базовый контейнер вашей кучи, если вы решите использовать что-то отличное от std :: vector. Все, что вам действительно нужно, это следующее:
template <class RandomAccessIterator>
void make_heap ( RandomAccessIterator first, RandomAccessIterator last );
Это означает, что вы можете превратить много разных контейнеров в кучу. Компаратор также необязателен в сигнатуре метода, вы можете прочитать больше о различных вещах, которые вы можете попробовать на страницах STL для функции make_heap.
Ссылки: