Как реализовать приоритетную очередь в C ++



Эта статья предоставит вам подробные и исчерпывающие знания о том, как реализовать приоритетную очередь в C ++ с примерами.

Очередь с приоритетом - это контейнер в STL. Это похоже на очередь, за исключением того факта, что каждый элемент очереди приоритета имеет определенный приоритет, и когда мы извлекаем элементы из очереди приоритета, элементы с наивысшим приоритетом извлекаются первыми. Как и приоритетная очередь, в ней есть 10 различных типов контейнеров. STL . Контейнер - это объект, в котором хранятся данные. Контейнеры STL реализованы с помощью классов шаблонов, поэтому их легко настроить для хранения различных типов данных. В этом посте мы подробно обсудим приоритетную очередь и концепции, связанные с ней. Следующие указатели будут рассмотрены в этой статье Priority Queue in C ++.

Продолжаем статью о очереди приоритетов в C ++





Компоненты STL

STL состоит из шаблонных классов и функций, которые можно использовать как стандартный подход для хранения и обработки данных. Давайте обсудим компоненты STL

Контейнеры- В STL определены 10 типов контейнеров, которые сгруппированы в 3 категории. Из этих 3 очередей приоритета принадлежит категория производного контейнера. Каждый контейнерный класс имеет свой собственный набор функций, которые можно использовать для управления данными.



Алгоритм - Алгоритм - это метод, используемый для обработки данных, имеющихся в объекте-контейнере. STL предоставляет множество различных типов алгоритмов, которые можно использовать для инициализации, поиска, сортировки, объединения и копирования. Алгоритмы реализованы с помощью шаблонных функций.

Итератор- Итератор - это объект, который указывает на элемент в контейнере. Итераторы могут помочь при перемещении по содержимому контейнера. Итераторы похожи на указатели, которые можно увеличивать и уменьшать. Он действует как связующее звено между алгоритмом и контейнером. Итераторы используются для управления данными, хранящимися в контейнере.

Продолжаем статью о очереди приоритетов в C ++



Кучи и приоритетная очередь

Как мы видели ранее, Priority Queue относится к категории производных контейнеров. Другие члены этой категории - стек и очередь. Эти производные контейнеры также известны как адаптеры контейнеров.

Стек, очередь и очередь с приоритетом известны как производные контейнеры, поскольку они сделаны из различных контейнеров последовательности. Эти контейнеры не поддерживают какие-либо итераторы, они не используются для манипулирования данными.

Что такое приоритетная очередь?

Проще говоря, это контейнер, который мы использовали для хранения данных. Каждому элементу хранимых данных назначается определенный приоритет, который может помочь нам хранить данные в логическом порядке.
Синтаксис:priority_queue имя_переменной

Важно включить в программу файл заголовка, чтобы использовать очередь приоритетов.

очередь приоритетов в c ++Например, если мы добавим 2, 10, 30, 5, 6 в нашу приоритетную очередь с помощью функции push, а затем вытолкнем элементы с помощью функции pop, на выходе будет 30, 10, 6, 5, 2.

Хорошо, теперь мы знаем цель или использование очереди с приоритетом. Но как он узнал, что 30> 10? Это какая-то сортировка? Тут на сцену выходят кучи. Чтобы подробнее узнать о кучах, обратитесь к этой статье.

Кучи - это древовидные структуры. В зависимости от того, как узлы дочерних элементов расположены в куче по отношению к родительским узлам, кучи делятся на 2 части.

один. Мин. Куча В Min Heap значение родительского узла меньше или равно значению дочерних узлов.

2. Макс. Куча В Max Heap значение родительского узла больше или равно значению дочерних узлов.

Заметка- Приоритетная очередь не сортирует элементы с использованием какого-либо алгоритма сортировки, а хранит данные в виде кучи.

Продолжаем статью о очереди приоритетов в C ++

Печать всех элементов приоритетной очереди

Поняв основы очереди с приоритетами, давайте реализуем программы, чтобы понять наиболее часто используемые методы с очередью приоритетов.

#include #include с использованием пространства имен std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Вывод:

30 15 10 9 6 2

В приведенной выше программе мы использовали функции pop (), top () и push (), которые чаще всего используются при работе с очередью с приоритетом. Давайте посмотрим на некоторые методы, которые мы можем использовать с приоритетной очередью.

размер (): Эта функция возвращает размер очереди приоритетов.

пустой (): Эта функция используется для проверки, пуста ли очередь приоритетов. Возвращает истину, если приоритетная очередь пуста.

От себя( ): Вставляет элемент в очередь приоритета.

pop (): Эта функция удаляет верхний элемент очереди приоритета, который является элементом с наивысшим приоритетом.

своп( ): Эта функция меняет местами элементы приоритетной очереди с другой приоритетной очередью. Функция принимает приоритетную очередь в качестве параметра.

как преобразовать тип в Java

emplace (): Эта функция используется для добавления элемента в начало очереди приоритета.

Посмотрим еще на одну программу.

#include #include с использованием пространства имен std int main () {priority_queue Prior_q Prior_q.push (10) Prior_q.push (30) Prior_q.push (6) Prior_q.push (2) Prior_q.push (15) Prior_q.push (9) Prior_q.push (7) while (Prior_q.empty () == false) {cout<< Prior_q.top() << ' ' Prior_q.pop() } return 0 }

Вывод:

2 6 7 9 10 15 30

На этом мы подошли к концу статьи «Очередь приоритетов в C ++». Если вы хотите узнать больше, ознакомьтесь с от Edureka, надежной компании онлайн-обучения. Курс обучения и сертификации по Java J2EE и SOA от Edureka разработан, чтобы обучить вас базовым и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и Spring.

Есть вопрос к нам? Пожалуйста, укажите это в разделе комментариев в этом блоге, и мы свяжемся с вами как можно скорее.