std::priority_queue C++ очередь с приоритетом

- priority_queue или очередь с приоритетом - это очередь в которой элементы сортируются по возрастанию значений - самый большой элемент становится верхним (читается методом top() и удаляется методом pop()).

- Подключается через include <queue>.

МетодОписаниеПримерСложность
emplace(Args&&... args) Создает и вставляет элемент в конец очереди. pq.emplace(5); O(1)
empty() Возвращает пустая ли очередь. if(pq.empty()) O(1)
pop() Удаляет верхний (самый большой) элемент очереди. pq.pop(); O(1)
push(const T& val) Вставляет элемент в вершину очереди. pq.push(12); O(1)
priority_queue() Конструктор пустой очереди; queue<int> pq; O(1)
priority_queue(iterator it_begin, iterator it_start) Конструктор очереди из диапазона итераторов другого контейнера. priority_queue pq(v.begin(), v.end()); O(n)
priority_queue(const priority_queue pq1) Конструктор копирования, создает очередь из значений другой очереди. priority_queue pq(pq1); O(n)
size() Возвращает количество элементов очереди. size_t sz = pq.size(); O(1)
swap(stack& pq1) Обменивает содержимое 2х очередей pq.swap(pq1); O(1)

#include <iostream> // cout
#include <queue>    // priority_queue

int main()
{
    std::priority_queue<int> pq1; // Пустой конструктор очереди pq1
    pq1.push(5); //{5} Вставка в очередь значения 5
    pq1.push(3); //{3, 5} Вставка в очередь значения 3 Элементы сортируются по возростанию
    pq1.push(10); //{3, 5, 10} Вставка в очередь значения 10 Элементы сортируются по возростанию
    std::cout << pq1.top() << "\n";  //10 Получить значение верхнего (последнего) элемента, без изменения очереди

    std::priority_queue<int> pq2{pq1}; // Конструктор с инициализацией

    std::priority_queue<int> pq3(std::move(pq2));  // Конструктор перемещения, теперь q2 пустая очередь

    while(!pq3.empty()){
        std::cout << pq3.top() << " ";    //10 5 3
        pq3.pop(); // Удаляем верхний элемент (уменьшаем очередь на 1)
    }
}
2023-12-15



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

array - статический массив (после создания размер не изменяется). Быстрее вектора.
Выбор контейнера из стандартной библиотеки С++.
deque - двусторонняя очередь (дек). Эффективное вставка-удаление по концам очереди.
forward_list - односвязный список с эффективной вставкой/удалением в начало списка.
list - двусвязный список с эффективной вставкой/удалением в любом месте списка.
map - словарь сортированных уникальных пар ключ-значение.
multimap - словарь сортированных неуникальных пар ключ-значение.
multiset - множество сортированных неуникальных элементов.
priority_queue - очередь с приоритетом (с сортировкой значений).
queue - очередь FIFO first in, first out "первый пришел - первый ушел".
set - множество сортированных уникальных элементов.
stack - стек LIFO last in, first out "последний пришел - первый ушел".
unordered_map - словарь несортированных уникальных пар ключ-значение.
unordered_multimap - словарь несортированных неуникальных пар ключ-значение.
unordered_multiset - множество несортированных неуникальных значений.
unordered_set - множество несортированных уникальных значений.
vector - вектор (массив) значений с изменяемым размером.