priority_queue — адаптер контейнера из стандартной библиотеки C++, который предоставляет функциональность очереди с приоритетами. Элементы извлекаются в порядке их приоритета (по умолчанию, наибольший элемент имеет наивысший приоритет). По сути, это обертка над другим контейнером (по умолчанию std::vector), которая использует алгоритмы кучи (std::make_heap, std::push_heap, std::pop_heap) для поддержания структуры кучи внутри базового контейнера.
Ключевые особенности:
std::less для определения приоритета, что означает наибольший элемент считается имеющим наивысший приоритет (макс-куча). Можно изменить порядок, предоставив другой компаратор, например, std::greater для мин-кучи.priority_queue не является самостоятельным контейнером, а адаптирует другой базовый контейнер (обычно std::vector, но может быть и другой, например std::deque), предоставляя интерфейс очереди с приоритетами.push), извлечения элемента с наивысшим приоритетом (pop) и просмотра элемента с наивысшим приоритетом (top).Основные операции:
| Операция | Описание | Сложность (в среднем/худшем случае) |
|---|---|---|
push | Вставляет элемент с заданным приоритетом. | O(log N) |
pop | Удаляет элемент с наивысшим приоритетом. | O(log N) |
top | Возвращает константную ссылку на элемент с наивысшим приоритетом. | O(1) |
empty | Проверяет, пуста ли очередь. | O(1) |
size | Получает количество элементов в очереди. | O(1) |
Пример использования:
cpp
Используется в алгоритмах, где необходимо постоянно извлекать элемент с наивысшим (или наименьшим) приоритетом, например, алгоритм Дейкстры, алгоритм Прима или в задачах моделирования событий.