Класс и объекты
Класс - это набор переменных и функций, которые работают вместе, где переменные не имеют значений, присвоенных. Когда переменным присваиваются значения, класс становится объектом. Различные значения, присвоенные одному и тому же классу, приводят к разным объектам; то есть разные объекты относятся к одному классу с разными значениями. Говорят, что создание объекта из класса создает экземпляр объекта.
Имя unordered_map - это класс. Объект, созданный из класса unordered_map, имеет имя, выбранное программистом.
Функция, принадлежащая классу, необходима для создания экземпляра объекта из класса. В C ++ эта функция имеет то же имя, что и имя класса. Объекты, созданные (экземпляры) из класса, имеют разные имена, данные им программистом.
Создание объекта из класса означает создание объекта; это также означает создание экземпляра.
Программа на C ++, использующая класс unordered_map, начинается со следующих строк в верхней части файла:
#включать#включать
используя пространство имен std;
Первая строка предназначена для ввода / вывода. Вторая строка позволяет программе использовать все возможности класса unordered_map. Третья строка позволяет программе использовать имена в стандартном пространстве имен.
Перегрузка функции
Когда две или более разных сигнатур функций имеют одно и то же имя, это имя считается перегруженным. Когда вызывается одна функция, количество и тип аргументов определяют, какая функция фактически выполняется.
Строительство / Копирование Строительство
Простая конструкция
Неупорядоченную карту можно построить и присвоить ей следующие значения:
unordered_mapumap ["банан"] = "желтый";
umap ["виноград"] = "зеленый";
umap ["рис"] = "фиолетовый";
Объявление начинается со специализации шаблона с типами для пар ключ и значение. За ним следует выбранное программистом имя для карты; затем точка с запятой. Второй сегмент кода показывает, как присвоить значения их ключам.
Строительство по Initializer_list
Это можно сделать следующим образом:
"виноградный", "зеленый", "инжирный", "фиолетовый");
Построение путем присвоения Initializer_list
Пример:
"виноградный", "зеленый", "инжирный", "фиолетовый";
Построение путем копирования другого unordered_map
Пример:
"виноградный", "зеленый", "инжирный", "фиолетовый");
unordered_map
Пара Элемент
Следующий код показывает, как создать элемент пары и получить к нему доступ:
параcout << pr.first << '\n';
cout << pr.second << '\n';
Результат:
dморе
первое и второе зарезервированные слова для двух элементов в паре. Значения в паре все еще можно изменить с помощью первого и второго.
Пара называется value_type в теме неупорядоченной карты.
Доступ к элементу unordered_map
mapped_type & operator [] (key_type && k)
Возвращает значение для соответствующего ключа. Пример:
umap ["банан"] = "желтый";
umap ["виноград"] = "зеленый";
umap ["рис"] = "фиолетовый";
const char * ret = umap ["виноград"];
cout << ret <<'\n';
Результат: «зеленый». Значения могут быть присвоены таким же образом - см. Выше.
unordered_map Емкость
size_type size () const noexcept
Возвращает количество пар на карте.
umap ["банан"] = "желтый";
umap ["виноград"] = "зеленый";
umap ["рис"] = "фиолетовый";
cout << umap.size() <<'\n';
Выход 3.
bool empty () const noexcept
Возвращает 1 для истины, если на карте нет пары, и 0 для false, если на ней есть пары. Пример:
unordered_mapcout << umap.empty() <<'\n';
Выход 1.
Возвращение итераторов и класса неупорядоченной карты
Итератор похож на указатель, но имеет больше функциональных возможностей, чем указатель.
begin () noexcept
Возвращает итератор, указывающий на первую пару объекта карты, как в следующем сегменте кода:
unordered_mapumap ["банан"] = "желтый"; umap ["виноград"] = "зеленый"; umap ["рис"] = "фиолетовый";
unordered_map
пара
cout << pr.first << ", " << pr.second << '\n';
Результат: инжир, фиолетовый. Карта неупорядочена.
begin () const noexcept;
Возвращает итератор, указывающий на первый элемент коллекции объектов карты. Когда конструкции объекта предшествует const, выражение «begin () const» выполняется вместо «begin ()». При этом условии, элементы в объекте не могут быть изменены. Он используется в следующем коде, например.
const unordered_map"виноградный", "зеленый", "инжирный", "фиолетовый");
unordered_map
пара
cout << pr.first << ", " << pr.second << '\n';
На выходе получается: инжир, фиолетовый. Карта неупорядочена. Обратите внимание, что на этот раз вместо итератора был использован const_iterator для получения возвращенного итератора.
конец () noexcept
Возвращает итератор, который указывает сразу за последним элементом объекта карты.
конец () const noexcept
Возвращает итератор, который указывает сразу за последним элементом объекта карты. Когда построению объекта карты предшествует const, выражение «end () const» выполняется вместо «end ()».
unordered_map Операции
поиск итератора (const key_type & k)
Ищет пару заданного ключа на карте. Если он найден, он возвращает итератор. Если не найден, он возвращает итератор, указывающий на конец карты, который не является парой. В следующем коде показано, как использовать эту функцию-член:
unordered_mapumap ['а'] = 'б'; umap ['c'] = 'd'; umap ['e'] = 'е';
unordered_map
если (umap.найти ('c') != umap.конец())
пара
cout << pr.first << ", " << pr.second << '\n';
Результат: c, d
const_iterator find (const key_type & k) const;
Эта версия функции вызывается, если создание неупорядоченной карты начинается с const, что делает все элементы карты доступными только для чтения.
unordered_map Модификаторы
пара
Неупорядоченная карта означает, что пары расположены не в каком-либо порядке. Итак, программа вставляет пару в любое удобное для нее место. Функция возвращает пару
umap ["банан"] = "желтый";
umap ["виноград"] = "зеленый";
umap ["рис"] = "фиолетовый";
umap.insert ("вишня", "красный", "клубничный", "красный");
cout << umap.size() << '\n';
Результат: 5. Можно вставить более одной пары.
size_type стереть (const key_type & k)
Эта функция стирает пару из unordered_map. Следующий фрагмент кода иллюстрирует:
unordered_mapumap ["банан"] = "желтый";
umap ["виноград"] = "зеленый";
umap ["рис"] = "фиолетовый";
int число = umap.стереть («виноград»);
cout << umap.size() << '\n';
Выход 2.
недействительный своп (unordered_map &)
Две неупорядоченные карты можно поменять местами, как показано в этом сегменте кода:
"виноградный", "зеленый", "инжирный", "фиолетовый", "клубничный", "красный";
unordered_map
umap1.своп (umap2);
unordered_map
пара
unordered_map
пара
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
unordered_map
"виноградный", "зеленый", "инжирный", "фиолетовый", "клубничный", "красный";
unordered_map
umap1.своп (umap2);
unordered_map
пара
unordered_map
пара
cout << "First key and size of umap1: "<< pr1.first <<", "<< umap1.size() << '\n';
cout << "First key and size of umap2 "<< pr2.first <<", "<< umap2.size() << '\n';
Результат:
Первый ключ и размер umap1: lime, 2
Первый ключ и размер клубники umap2, 4
Карта неупорядочена. Обратите внимание, что длина карты при необходимости увеличивается. Типы данных должны быть одинаковыми.
Класс и его экземпляры
Значение относится к типу данных, как созданный объект относится к классу. Построение неупорядоченной карты также может принимать класс как тип данных. Следующая программа иллюстрирует это:
#включать#включать
используя пространство имен std;
класс TheCla
общественность:
int num;
static char ch;
void func (char cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
статическая пустота весело (char ch)
если (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla obj1; TheCla obj2; TheCla obj3; TheCla obj4; TheCla obj5;
unordered_map
umap = "банан", obj1, "виноград", obj2, "инжир", obj3, "клубника", obj4, "лайм", obj5;
cout << umap.size() << '\n';
возврат 0;
Результат: 5.
Определение класса имеет два открытых члена данных и две публичные функции члена. В функции main () создаются экземпляры различных объектов класса. Затем создается неупорядоченная карта, где каждая пара состоит из названия фрукта и объекта из класса. Отображается размер карты. Программа компилируется без предупреждений или сообщений об ошибках.
Применение карты
Массив связывает индекс со значением. Пары ключ / значение существуют во многих жизненных ситуациях, которые можно запрограммировать. Пара ключ / значение фрукт / цвет - лишь один пример. Другой пример - имена людей и их возраст. В этом случае пара будет типа, пара
Формирование карты
Карта - это не двухмерный массив с двумя столбцами. Карта работает с хеш-функцией. Ключ кодируется хеш-функцией в целое число массива. Именно в этом массиве хранятся значения. Итак, на самом деле существует один массив со значениями, и ключи отображаются на индексы массива, и поэтому соответствия между ключами и значениями выполняются. Хеширование - обширная тема, которая не рассматривается в этой статье.
Заключение
Карта, также известная как ассоциативный массив, представляет собой список элементов, где каждый элемент представляет собой пару ключ / значение. Итак, каждому ключу соответствует значение. В C ++ карта реализована как структура данных с функциями-членами и операторами. Упорядоченная карта - это карта, в которой пары элементов упорядочены по ключам. Неупорядоченная карта - это карта, в которой нет упорядочивания.
Технически хеш состоит из пары
Initializer_list для карты - это литерал массива литералов. Каждый внутренний литерал состоит из двух объектов, пары ключ / значение.
Функции-члены и операторы для unordered_map можно разделить на следующие категории: создание / копирование unordered_map, емкость unordered_map, итератор unordered_map, операции unordered_map и модификаторы unordered_map.
Неупорядоченная карта используется, когда ключ должен быть сопоставлен со значением.
Chrys