506 ______Часть III. Современное программирование на C++

typedef queue<STUDENT, deque<STUDENT» STUDENT_QUEUE;

int main() {

STUDENT_QUEUE line;

// Поместим их в очередь.

line.push(STUDENT("Abe Line", 3.2));

line.push(STUDENT("John Brown", 2.0));

line.push(STUDENT("Frank Coke", 2.5));

line.push(STUDENT("Sam Adit", 0.6));

line.push(STUDENT("Samual Cart", 4.0));

line.push(STUDENT("Ida Smith", 1.4));

line.push(STUDENT("Tom Johnson", 3.9));

line.push(STUDENT("Carl West", 2.6));

cout « line.front().Getld() « " стоит в очереди первым.\п";

cout « line.backO.Getldf) « " замыкает очередь.\n";

cout « "В очереди стоит " « line.size О « " студентов.\n^';

while(!line.empty()) {

cout « line.front();

line.pop() ;

} return 0;

Приоритетная очередь

Приоритетная очередь (priority queue), или ранжированная очередь — это структура данных, в которой элементы удаляются не в зависимости от того, в каком порядке они были туда помещены, как в случае стека или очереди, а в соответствии со своим приоритетом.

Подобно стеку и очереди, приоритетная очередь из библиотеки STL — это контейнер-адаптер. Для объявления приоритетной очереди используется вектор или двусторонняя очередь. Заголовочный файл для приоритетной очереди — queue.h — тот же, что и для очереди.

Существует два способа определения приоритета каждого элемента. Контейнер может использовать операцию <, определенную для типа хранимого объекта или функцию сравнения:

// Операция < определена в STUDENT

priority_queue<STUDENT, deque<STUDENT» studentPQl; '

// Инициализация новой приоритетной очереди

// из существующего контейнера.

priority_queue<STUDENT, deque<STUDENT»

studentPQ2(studentVectorl.begin(), studentVector2.end()) ;

// Использование объекта-функции сравнения COMPARE_GRADE. priority_queue<STUDENT, vector<STUDENT», COMPARE GRADE> studentPQ3;