Контейнеры типа 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
Как видно, объекты выстроены по убыванию возраста. Очереди и стеки допускают повторение элементов.