Иллюстрированный самоучитель по 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

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



Содержание раздела