На этом шаге мы рассмотрим пример использования приоритетных очередей.
Пример использования класса priority_queue<>:
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <queue> #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } int main() { priority_queue<float> q; // Вставка трех элементов в приоритетную очередь q.push(66.6); q.push(22.2); q.push(44.4); // Вывод и удаление двух элементов cout << ToRus("Извлечение и вывод двух элементов из очереди: \n"); cout << q.top() << ' '; q.pop(); cout << q.top() << endl; q.pop(); // Вставка еще трех элементов q.push(11.1); q.push(55.5); q.push(33.3); // Удаление одного элемента q.pop(); // Извлечение и вывод оставшихся элементов cout << ToRus("Извлечение и вывод оставшихся элементов: \n"); while (!q.empty()) { cout << q.top() << ' '; q.pop(); } cout << endl; getch(); return 0; } //---------------------------------------------------------------------------
Результат выполнения программы выглядит так:
Рис.1. Результат работы приложения
Как видите, после вставки значений 66.6, 22.2 и 44.4 программа считает старшими элементами 66.6 и 44.4. После вставки еще трех элементов приоритетная очередь содержит значения 22.2, 11.1, 55.5 и 33.3 (в порядке вставки). Следующий элемент просто удаляется вызовом рор(), поэтому итоговый цикл выводит значения 33.3, 22.2 и 11.1 именно в этом порядке.
На следующем шаге мы приведем строение класса priority_queue.