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;