Что такое std :: map?
В C ++ MAP - это ассоциативный контейнер, хранящий элементы в отображаемой форме. Каждый элемент на карте состоит из пары "ключ-значение" и сопоставленного значения. Два сопоставленных значения не могут иметь одинаковые ключевые значения.
Ключевые значения удобны для однозначной сортировки и идентификации элементов. Сопоставленные значения предназначены для хранения содержимого, связанного с ключом. Эти два типа могут различаться, но тип элемента объединяет их через тип пары, который объединяет оба.
В этом руководстве по C ++ вы узнаете:
- Что такое std :: map?
- Зачем использовать std :: map?
- Синтаксис:
- Типы участников:
- Встроенные функции
- Итерация по элементам карты
- Вставка данных в std :: map:
- Поиск на карте
- Удаление данных с карты
Зачем использовать std :: map?
Вот причины для использования карты:
- std :: map хранит уникальные ключи только в отсортированном порядке на основе выбранных критериев сортировки.
- Искать элементы с помощью ключа проще и быстрее.
- К каждой клавише прикреплен только один элемент.
- std :: map можно использовать как ассоциативный массив.
- std :: map реализуется с использованием бинарных деревьев (сбалансированных).
Синтаксис:
Чтобы объявить std :: map, используйте этот синтаксис:
std::mapmap_name;
- Key_datatype обозначает тип данных ключей карты.
- Value_datatype обозначает тип данных значений, соответствующих ключам карты.
- Map_name - это имя карты.
Например:
mapmy_map;
Мы объявили карту с именем my_map. Карта будет иметь строку как ключевые типы данных и целое число как тип данных значений .
Типы участников:
Функции-члены могут использовать следующие типы членов в качестве параметров или возвращаемого типа:
- key_type: Key (первый параметр в шаблоне)
- mapped_type: T (второй параметр в шаблоне)
- key_compare: Сравнить (третий параметр в шаблоне)
- allocator_type: Alloc (четвертый параметр в шаблоне)
- value_type: пара
- value_compare: вложенный класс функции для сравнения элементов
- ссылка: тип_распределителя :: ссылка
- const_reference: тип_распределителя :: const_reference
- указатель: тип_распределителя :: указатель
- const_pointer: allocator_type :: const_pointer
- итератор: двунаправленный итератор для value_type
- const_iterator: двунаправленный итератор для const value_type
- reverse_iterator: обратный итератор
- const_reverse_iterator: постоянный обратный итератор
- разница_тип : ptrdiff_t
- size_type: size_t
Встроенные функции
std :: map имеет встроенные функции. Некоторые из них включают:
- begin () - эта функция возвращает итератор к первому элементу карты.
- size () - эта функция возвращает количество элементов на карте.
- empty () - эта функция возвращает логическое значение, указывающее, пуста ли карта.
- insert (pair (key, value)) - эта функция вставляет новую пару ключ-значение на карту.
- find (val) - эта функция передает итератор элементу val, если он найден. В противном случае он вернет m.end ().
- Erase (позиция итератора) - эта функция удаляет элемент в позиции, указанной итератором.
- erase (const g) - эта функция удаляет значение ключа g с карты.
- Clear () - эта функция удаляет все элементы с карты.
Итерация по элементам карты
Вы можете перебирать элементы карты. Нам просто нужно создать итератор и использовать его для этого. Например:
Пример 1:
#include#include #include
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка iostream в наш код, чтобы использовать его функции.
- Включите файл заголовка строки в наш код, чтобы использовать его функции.
- Включите файл заголовка карты в наш код, чтобы использовать его функции.
- Включите пространство имен std в наш код, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main (). {Отмечает начало тела функции.
- Создайте карту с именем «Студенты», где ключи будут целыми числами, а значения - строками.
- Вставьте значения в карту Учащиеся. Ключ 200 и значение Алисы будут вставлены в карту.
- Вставьте значения в карту Учащиеся. Ключ 201 и значение John будут вставлены в карту.
- Используйте функцию size (), чтобы получить размер карты с именем «Студенты». Это должно вернуть 2.
- Напечатайте текст на консоли.
- Используйте цикл for, чтобы создать итератор, назвав его, чтобы перебирать элементы карты с именем «Студенты».
- Распечатайте значения карты Студенты на консоли.
- Конец тела цикла for.
- Конец тела функции main ().
Вставка данных в std :: map
Вы можете вводить элементы в std :: map с помощью функции insert (). Помните, что ключи std :: map должны быть уникальными.
Итак, сначала он проверяет, присутствует ли каждый ключ на карте. Если он присутствует, запись не будет вставлена, но вернет итератор для существующей записи. Если его нет, запись вставляется.
Функция имеет следующие варианты:
- insert (pair) - в этом варианте в карту вставляется пара "ключ-значение".
- insert (start_itr, end_itr) - с этим вариантом записи будут вставлены в пределах диапазона, определенного start_itr и end_itr с другой карты.
Функция insert_or_assing () работает так же, как функция insert (), но если данный ключ уже существует на карте, его значение будет изменено.
Пример 2:
#include
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка карты в наш код, чтобы использовать его функции.
- Включите файл заголовка iostream в наш код, чтобы использовать его функции.
- Включите пространство имен std в наш код, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main (). {Отмечает начало тела функции.
- Создайте карту с именем m, где ключи будут целыми числами, а значения будут целыми числами. На карту внесены три записи.
- Вставьте новую запись на карту m. Ключ 5 и значение 6 будут вставлены в карту.
- Пытаюсь сделать запись в уже существующий ключ. Поскольку ключ 1 уже существует на карте, запись не будет произведена.
- Использование функции insert_or_assign () для вставки или изменения существующей записи. Поскольку ключ 1 уже существует, его значение будет изменено на 6.
- Напечатайте текст на консоли. Символ «\ t» создает горизонтальный пробел, а символ «\ n» перемещает курсор мыши на следующую строку.
- Используйте цикл for для создания итератора с именем itr для перебора элементов карты с именем m.
- Распечатайте значения карты m на консоли. Символ «\ t» создает горизонтальный интервал между каждой клавишей и соответствующим ей значением. Напротив, символ «\ n» перемещает курсор мыши на следующую строку после каждой итерации.
- Конец тела петли.
- Программа должна вернуть значение после успешного завершения.
- Конец тела функции main ().
Поиск на карте
Мы можем использовать функцию find () для поиска элементов на карте по их ключам. Если ключ не найден, функция возвращает std :: map :: end. В противном случае будет возвращен итератор искомого элемента.
Пример 2:
#include#include #include
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка iostream в наш код, чтобы использовать его функции без ошибок.
- Включите файл заголовка строки в наш код, чтобы использовать его функции без ошибок.
- Включите файл заголовка карты в наш код, чтобы использовать его функции без ошибок.
- Включите пространство имен std в наш код, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main (). {Отмечает начало тела функции main ().
- Создайте карту с именем «Студенты», ключи которой будут целыми числами и строками значений.
- Вставьте значения в карту Учащиеся. Ключ 200 и значение Алисы будут вставлены в карту.
- Вставьте значения в карту Учащиеся. Ключ 201 и значение John будут вставлены в карту.
- Найдите значение, связанное с ключом 201.
- Используйте оператор if, чтобы проверить, найдено ли значение для ключа.
- Напечатайте значение ключа рядом с текстом на консоли.
- Конец тела оператора if.
- Конец тела функции main ().
Удаление данных с карты
Мы можем использовать функцию erase () для удаления значения с карты. Мы просто создаем итератор, указывающий на удаляемый элемент. Затем итератор передается функции erase ().
Пример 3:
#include#include #include
Выход:
Вот скриншот кода:
Пояснение к коду:
- Включите файл заголовка iostream в наш код, чтобы использовать его функции.
- Включите файл заголовка строки в наш код, чтобы использовать его функции.
- Включите файл заголовка карты в наш код, чтобы использовать его функции.
- Включите пространство имен std в наш код, чтобы использовать его классы, не вызывая его.
- Вызовите функцию main (). {Отмечает начало тела функции main ().
- Создайте карту с именем my_map, ключами которой будут строки и целые числа значений.
- Вставьте значения в карту my_map. Ключ Cow и значение 1 будут вставлены в карту.
- Вставьте значения в карту my_map. Ключ Cat и значение 2 будут вставлены в карту.
- Добавьте значение 3 в карту my_map с ключом льва.
- Создайте итератор для перебора карты my_map в поисках ключевого кота.
- Удалите элемент, на который указывает итератор.
- Используйте итератор для перебора элементов карты my_map от начала до конца.
- Распечатайте содержимое карты my_map на консоли.
- Программа должна возвращать результат после успешного завершения.
- Конец тела функции main ().
Резюме:
- Карта - это ассоциативный контейнер, в котором элементы хранятся в сопоставленной форме.
- Каждый элемент на карте имеет значение ключа и сопоставленное значение.
- На карте два сопоставленных значения не могут иметь общие значения ключей.
- Ключевые значения помогают однозначно сортировать и идентифицировать элементы.
- Сопоставленные значения помогают в хранении содержимого, связанного с ключом.
- Карта C ++ хранит уникальные ключи в отсортированном порядке.
- Для работы с картой C ++ мы создаем итератор для перебора элементов.
- С итератором мы можем выполнять такие задачи, как поиск и удаление элементов с карты.