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