Иногда удобно в одной переменной хранить одновременно два значения, например, два целых числа. Например, координаты точки на плоскости удобно хранить в одной переменной, содержащих два числа: 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
Обратите внимание на пробел между закрывающими угловыми скобками:
он обязателен, иначе компилятор будет считать это операцией “>>
”