Иногда удобно в одной переменной хранить одновременно два значения, например, два целых числа. Например, координаты точки на плоскости удобно хранить в одной переменной, содержащих два числа: x-координату и y-координату. Для этого в STL есть шаблон pair (пара), особенно удобно использовать pair для сортировки объектов.
Pair является переменной, объединяющей в себе два значения, которые могут быть одного или разных типов. Например, чтобы создать переменную типа pair, содержащую два поля типа int нужно использовать следующее объявление:
pair <int, int> a;
Теперь переменная a будет хранить в себе два значения типа int.
Получить доступ к первому значению можно при помощи записи a.first,
а ко второму значению — a.second, они называются полями
переменной. Каждому полю можно присваивать независимые значения, например, так:
a.first = 1; a.second = 2;
Присвоить одновременно два значения обоим полям пары можно при помощи функции
make_pair, принимающующей два аргумента и возвращающей значение
типа pair с соответствующими полями:
a = make_pair(1, 2);
Между тем с переменной типа pair можно работать и как с единым целым, например,
если объявить две переменные типа pair с одинаковыми типами полей, то
можно одной переменной присвоить значение другой переменной:
pair <int, int> a, b; ... b = a;
Но при вводе-выводе переменных, типа pair нельзя выводить или вводить значение
переменной одной командой, то есть нельзя сразу же вывести два значения типа:
cin >> a; cout << a;
Вместо этого нужно отдельно считывать или выводить каждое поле пары.
Можно создавать пару с полями разных типов, например, чтобы
поле first имело тип double, а поле
second — string, нужно
использовать запись pair <double, string>.
С парой, как с целым (то есть одновременно с двумя полями структуры)
можно выполнять следующие операции:
=,
==,
!=,
<,
<=,
>,
>=,
а также использовать в качестве аргумента функции swap.
При использовании операций сравнения (типа меньше, больше и т.д.) пары
сравниваются в лексикографическом порядке, то есть сначала по полю
first, а если поля first равны, то по полю
second.
Вектор, составленный из структур pair можно сортировать,
при этом используется сравнение типа <, то есть
пары упорядочиваются по первому полю, затем — по второму полю.
Объявить вектор из пар можно следующим образом:
vector < pair< int, int> > a
Обратите внимание на пробел между закрывающими угловыми скобками:
он обязателен, иначе компилятор будет считать это операцией “>>”