Иллюстрированный самоучитель по Visual Studio .NET

Контейнеры типа 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

Как видно, объекты выстроены по убыванию возраста. Очереди и стеки допускают повторение элементов.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.