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