Использование библиотеки STL

Пары объектов (pair)

В качестве введения к данной лекции поговорим о «парах» объектов в STL -- std::pair.

Пара -- это просто шаблонная структура, которая содержит два поля, возможно, различных типов. Поля имеют названия first и second. В максимально краткой форме прототип пары может выглядеть следующим образом:

template<typename T1, typename T2> struct pair {
   T1 first;
   T2 second;
};
К примеру, pair<int,int> есть пара двух целых чисел. Более сложный пример: pair<string, pair<int,int> > -- строка плюс два целых числа. Использовать подобную пару можно, например, так:
pair<string, pair<int,int> > P;
string s = P.first; // Строка
int x = P.second.first; // Первое целое
int y = P.second.second; // Второе целое
Основной причиной к использованию pair является то, что объекты pair можно сравнивать. Поэтому, при всей кажущейся простоте, пары активно используются как внутри библиотеки STL, так и программистами в своих целях.

Сравнение пар предоставляет широкие возможности для экстремального программирования. Массив пар можно упорядочить, при этом упорядочивание будет производиться по полям в порядке описания пар слева направо.

Например, необходимо упорядочить целочисленные точки на плоскости по полярному углу. Одним из простых решений является поместить все точки в структуру вида

vector< pair<double, pair<int,int> >
где double -- полярный угол точки, а pair<int,int> -- её координаты. После этого один вызов стандартной функции сортировки приведёт к тому, точки будут упорядочены по полярному углу.

Также пары активно используются в ассоциативных контейнерах, но об этом мы поговорим позднее.