pair p;p — пара с переменными-членами типов T1 и T2, инициализированными значением по умолчанию (см. раздел 3.3.1)
pair р(v1, v2);p — пара с переменными-членами типов T1 и T2, инициализированными значениями v1 и v2 соответственно
pair р = {v1, v2};Эквивалент p(v1, v2)
make_pair(v1, v2)Возвращает пару, инициализированную значениями v1 и v2. Тип пары выводится из типов значений v1 и v2
p.firstВозвращает открытую переменную-член first пары p
p.secondВозвращает открытую переменную-член second пары p
p1 опсравн p2Операторы сравнения (<, >, <=, >=). Сравнение осуществляется подобно упорядочиванию в словаре, т.е. оператор < возвращает значение true в случае, если p1.first < p2.first или !(p2.first < p1.first) && p1.second < p2.second
p1 == p2, p1 != p2Две пары равны, если их первый и второй члены соответственно равны. При сравнении используется оператор == хранимых элементов
Функция для создания объектов типа pair

Предположим, некая функция должна возвратить значение типа pair. По новому стандарту возможна списочная инициализация возвращаемого значения (см. раздел 6.3.2):

pair

process(vector &v) {

 // обработка v

 if (!v.empty())

  return {v.back(), v.back().size()}; // списочная инициализация

 else

  return pair(); // возвращаемое значение создано явно

}

Если вектор v не пуст, возвращается пара, состоящая из последней строки в векторе v и размера этой строки. В противном случае явно создается и возвращается пустая пара.

В прежних версиях языка С++ нельзя было использовать инициализаторы в скобках для возвращения типа, подобного pair. Вместо этого можно было написать оба оператора return как явно созданное возвращаемое значение:

if (!v.empty())

 return pair(v.back(), v.back().size());

В качестве альтернативы можно использовать функцию make_pair() для создания новой пары соответствующего типа из двух аргументов:

if (!v.empty())

 return make_pair(v.back(), v.back().size());

Упражнения раздела 11.2.3

Упражнение 11.12. Напишите программу, читающую последовательность строк и целых чисел, сохраняя каждую прочитанную пару в объекте класса pair. Сохраните пары в векторе.

Упражнение 11.13. Существует по крайней мере три способа создания пар в программе предыдущего упражнения. Напишите три версии программы, создающей пары каждым из этих способов. Укажите, какая из форм проще и почему.

Упражнение 11.14. Дополните карту фамилий семей и их детей, написанную для упражнения в разделе 11.2.1, вектором пар, содержащих имя ребенка и день его рождения.

<p>11.3. Работа с ассоциативными контейнерами</p>

В дополнение к типам, перечисленным в табл. 9.2 (стр. 423), ассоциативные контейнеры определяют типы, перечисленные в табл. 11.3. Они представляют типы ключа и значения контейнера.

Таблица 11.3. Псевдонимы дополнительных типов ассоциативных контейнеров

key_typeТип ключа контейнера
mapped_typeТип, ассоциированный с каждым ключом; только для типа map
value_typeДля наборов то же, что и key_type. Для карт — pair

Для контейнеров типа set типы key_type и value_type совпадают; содержащиеся в наборе данные являются ключами. Элементами карты являются пары ключ-значение. Таким образом, каждый ее элемент — объект класса pair, содержащий ключ и связанное с ним значение. Поскольку ключ элемента изменить нельзя, ключевая часть этих пар константна:

set::value_type v1;       // v1 - string

set::key_type v2;         // v2 - string

map::value_type v3;  // v3 - pair

map::key_type v4;    // v4 - string

map::mapped_type v5; // v5 - int

Перейти на страницу:

Похожие книги