#include <iostream>
#include <vector>
#include <algorithm>
class PriorityQueue {
private:
std::vector<int> heap; // Вектор для хранения элементов кучи
public:
// Добавление элемента в очередь
void push(int value) {
heap.push_back(value); // Добавляем элемент в конец вектора
std::push_heap(heap.begin(), heap.end()); // Восстанавливаем свойства кучи
}
// Удаление максимального элемента из очереди
void pop() {
if (!heap.empty()) {
std::pop_heap(heap.begin(), heap.end()); // Перемещаем максимальный элемент в конец
heap.pop_back(); // Удаляем его из вектора
}
}
// Получение максимального элемента
int top() const {
if (!heap.empty()) {
return heap.front(); // Максимальный элемент всегда находится в начале
}
throw std::out_of_range("Queue is empty");
}
// Проверка на пустоту
bool empty() const {
return heap.empty();
}
// Размер очереди
size_t size() const {
return heap.size();
}
};
int main() {
PriorityQueue pq;
// Добавляем элементы в очередь
pq.push(10);
pq.push(30);
pq.push(20);
pq.push(5);
// Выводим максимальный элемент
while (!pq.empty()) {
std::cout << "Max element: " << pq.top() << std::endl;
pq.pop(); // Удаляем максимальный элемент
}
return 0;
}