Кортежи, словари и множества

В этой главе мы продолжим изучение STL и рассмотрим три структуры: кортежи, словари и множества. Словари (или ассоциативные массивы) — это наборы элементов, доступ к которым осуществляется не по индексу, а по уникальному ключу. Множество — это набор уникальных элементов, с которым можно сравнивать другие элементы, чтобы определить, принадлежат ли они этому множеству.

Класс pair: пара значений

Класс pair, объявленный в заголовочном файле utility, реализует пару значений, например, ключ/значение для словаря. Первое значение доступно через свойство first, а второе значение — через свойство second. Объявление класса pair:

#include <utility>
template<typename _T1, typename _T2>
   struct pair : private __pair_base<_T1, _T2>;

Создать экземпляр класса можно так:

  • объявить переменную без инициализации. Для этого перед названием переменной указывается название класса pair, а после названия внутри угловых скобок через запятую задаются типы данных значений. В этом случае свойства будут иметь значения по умолчанию для конкретного типа. Например, для типа int свойство будет содержать значение 0. Пример объявления без инициализации:
std::pair<int, int> pr;
std::cout << pr.first << std::endl;  // 0
std::cout << pr.second << std::endl; // 0
  • указав после названия переменной внутри круглых скобок два значения через запятую (доступно копирование и перемещение значений):
typedef struct std::pair<std::string, int> PAIR;
PAIR pr("Key", 10);
std::cout << pr.first << std::endl;  // Key
std::cout << pr.second << std::endl; // 10
  • указав после названия переменной внутри круглых скобок другой объект класса pair (доступны конструкторы копирования и перемещения):
typedef struct std::pair<std::string, int> PAIR;
PAIR pr1("Key", 10);
PAIR pr2(pr1);
std::cout << pr2.first << std::endl;  // Key
std::cout << pr2.second << std::endl; // 10

Кроме того, можно воспользоваться шаблонной функцией make_pair(). Пример:

typedef struct std::pair<int, int> PAIR;
PAIR pr = std::make_pair(5, 10);
std::cout << pr.first << std::endl;  // 5
std::cout << pr.second << std::endl; // 10

Над двумя объектами класса pair определены операции ==, !=, <, <=, > и >=. Кроме того, один объект можно присвоить другому объекту. В этом случае выполняется копирование значений или перемещение. С помощью метода swap() можно поменять значения двух объектов местами:

typedef struct std::pair<int, int> PAIR;
PAIR pr1(5, 10);
PAIR pr2(3, 1);
pr2.swap(pr1);
std::cout << pr1.first << std::endl;  // 3
std::cout << pr1.second << std::endl; // 1
std::cout << pr2.first << std::endl;  // 5
std::cout << pr2.second << std::endl; // 10

Для получения и изменения значений используются общедоступные свойства first и second, а также функция get(), после названия которой внутри угловых скобок указывается индекс 0 (доступ к first) или 1 (доступ к second), далее внутри круглых скобок передается объект класса pair:

std::pair<int, int> pr(5, 10);
std::get<0>(pr) = 3;
std::cout << std::get<0>(pr) << std::endl; // 3
std::cout << std::get<1>(pr) << std::endl; // 10

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов