с приоритетами тоже является адаптером,
Контейнеры типа priority_queue Очередь с приоритетами тоже является адаптером, который позволяет вставку элементов, инспекцию и удаление верхнего (top) элемента. Она не допускает итераций прохода по своим элементам. Ее характерным отличием является то, что верхний элемент является самым большим в том смысле, в котором в шаблоне используется функциональный объект (Compare — сравнение объектов). Для разнообразия приведем объявление шаблона: template < class Type, class Container=vector<Type>, class Compare=less<typename Container : : value__type> > Отсюда видно, что по умолчанию очередь с приоритетами основана на контейнере типа vector и для сравнения приоритетов она использует предикат lesso. Для объектов класса Man — это внешняя friend-функция operator< (), которая упорядочивает последовательность по возрасту. Но очередь с приоритетами должна расставить элементы по убыванию приоритетов. Проверим это утверждение с помощью следующего фрагмента: void main () { //===== Priority queue (by age) priority_queue<Man> men; men.push (zoran); //== Для проверки поведения вставляем объект повторно men.push (zoran); men.push (joy); men.push (mela); men.push (win); cout«"priority_queue size: "«men. size () «endl; int i=0; while ('men.empty()) { cout « "\n"« ++i«". "«men.top(); men.pop(); } } Выходом этой программы будет такой текст: priority_queue size: 5 1. Winton Kelly, Age: 50 2. Zoran Todorovitch, Age: 27 3. Zoran Todorovitch, Age: 27 4. Joy Amore, Age: 18 5. Melissa Robinson, Age: 9 Как видно, объекты выстроены по убыванию возраста. Очереди и стеки допускают повторение элементов. |