Как очистить map c

от admin

map::clear() in C++ STL

In this article we will be discussing the working, syntax and examples of map::clear() function in C++ STL.

What is a Map in C++ STL?

Maps are the associative container, which facilitates to store the elements formed by a combination of key value and mapped value in a specific order. In a map container the data is internally always sorted with the help of its associated keys. The values in the map container are accessed by its unique keys.

What is a map::clear()?

map::clear() function is an inbuilt function in C++ STL, which is defined in header file. clear() is used to remove all the content from the associated map container. This function removes all the values and makes the size of the container as 0.

Как очистить map c

Класс System.Drawing.Bitmap очень полезен в инфраструктуре .NET, т.к. позволяет считывать и сохранять файлы различных графических форматов. Единственная проблема – это то, что он не очень полезен для попиксельной обработки – например если нужно перевести битмап в ч/б. Под катом – небольшой этюд на эту тему.

Класс map . Методы изменяющие данные в контейнере

Метод erase() удаляет элемент или группу элементов разными способами. Метод имеет несколько перегруженных реализаций.

2.1. Удаление одного элемента по заданному ключу

Распространенной реализацией метода erase() является удаление элемента на основе заданного ключа. Синтаксис объявления этой реализации следующий

  • keyType – тип ключа;
  • keyVal – значение ключа.

Пример.

2.2. Удаление одного элемента, на который указывает итератор

В этой реализации метода erase() удаляется один элемент, на который указывает итератор. Синтаксис объявления метода следующий

  • Where – константный итератор, указывающий на элемент, который должен быть удален.

Пример.

2.3. Удаление нескольких элементов, которые заданы диапазоном

Диапазон определяется итератором начала и итератором конца

  • iterator , const_iterator – тип итератора и константного итератора для текущего контейнера;
  • First – элемент, определяющий начало диапазона удаления;
  • Last – элемент, определяющий конец диапазона удаления. Значение Last указывает на элемент, находящийся за последним удаляемым элементом.

Пример.

3. Метод insert() . Добавить новую пару в массив

Метод insert() добавляет в ассоциативный контейнер новую пару. Метод имеет много перегруженных реализаций. Ниже приведены некоторые из этих реализаций.

3.1. Вставить элементы на основе списка инициализации std::initializer_list

С помощью данной реализации метода insert() сначала создается список инициализации типа std::initializer_list , затем этот перечень передается аргументом в метод insert() . Объявление метода имеет вид

  • kType – тип ключа;
  • vType – тип значения.

Приклад.

3.2. Добавить пару в контейнер

Чтобы добавить пару key:value в контейнер, используется следующая реализация метода insert()

  • kType – тип ключа;
  • vType – тип значения;
  • _Val – значение пары.

Пример.

3.3. Вставка диапазона

Данная реализация метода insert() позволяет вставлять целый диапазон пар key:value из ранее сформировавшегося ассоциативного массива. Диапазон задается двумя итераторами. Первый итератор указывает начало диапазона. Второй итератор указывает на элемент, находящийся за последним элементом диапазона, который нужно вставить.

Синтаксис объявления метода

  • _Iter – тип итератора;
  • First , Last – итераторы, определяющие диапазон элементов

Пример.

4. Метод swap() . Обменять местами содержимое двух контейнеров

При помощи метода swap() можно обменять содержимое двух контейнеров. Синтаксис объявления метода

  • kType – тип ключа;
  • vType – тип значения;
  • _Right – объект класса map , элементы которого обмениваются с элементами вызывающего объекта.

Тип ключа kType и тип значения vType должны совпадать с типами ключа и значения объекта, который вызывает метод swap() .

Пример.

5. Операторная функция operator=() . Присвоить один контейнер другому

С помощью операторной функции operator=() реализуется обычная операция присваивания одного контейнера другому. Синтаксис объявления функции

  • kType – тип ключа;
  • vType – тип значения;
  • _Right – объект, размещаемый справа от операции присваивания (контейнер-оригинал). При копировании контейнеров создается полная копия контейнера _Right . Это означает, что после выполнения операции присваивания = оба контейнера размещаются в разных участках памяти.

Пример.

Как видно из результата, была создана полная копия контейнера m2 в другой области памяти.

Контейнер map (функции at(), clear(), count(), erase(), empty())

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

Читать:
Как сделать чтобы торрент качал в спящем режиме

myMap contains:
Alpha : 233
Beta : 0
Gamma : -45

myMultimap contains:
a : 301
b : 111
c : 201

myMap after clear contains: myMultimap after clear contains:
Cloude : 17 h : 221
Mike : 40 q : 222
Vally : 999 u : 223

В строках 7 по 9 происходит явная инициализация контейнера map. Т. к. каждому «ключу» соответствует единственное «значение», то в строках 12-14 при помощи функции map::at() , используя «ключ», мы изменяем установленное «значение». Вывод осуществляемый в строках 17-20, наглядно демонстрирует это. Multimap не поддерживает функцию map::at() .

В 22 строке объявили контейнер multumap , который принимает два типа переменных char и int . В строках 25-27 производим заполнение контейнера multimap , а в строках 30-33 осуществляем вывод. В строке 35, 36 при помощи функции map::clear() , производится очистка контейнера multimap и map . В строках 39-41 и 44-46 производится заполнение контейнеров multimap и map новыми значениями. В строке 48, 49 создается итератор itMap указывающий на начало myMap и итератор itMultimap , указывающий на начало myMultimap . В строках 53-56 соответственно производится вывод map и multimap с новыми значениями.

Контейнеры multimap и map содержат функцию которая позволяет выполнять поиск заданного элемента по контейнеру, пример:

myMap contains: myMultimap contains:
a : 0 a : 23
b : 1 a : 56
c : 2 b : 996
d : 3 c : 146
e : 4 c : 121

Number of elements ‘a’ in myMap = 1
Number of elements ‘a’ in myMultimap 2
Number of elements ‘b’ in myMap = 1
Number of elements ‘b’ in myMultimap 1
Number of elements ‘c’ in myMap = 1
Number of elements ‘c’ in myMultimap 2
Number of elements ‘d’ in myMap = 1
Element ‘d’ is not in myMultimap
Number of elements ‘e’ in myMap = 1
Element ‘e’ is not in myMultimap
Element ‘f’ is not in myMap
Element ‘f’ is not in myMultimap

myMap contains: myMultimap contains:
a : 0 a : 56
c : 2 b : 996

myMap is empty
myMultimap isn’t empty

Думаю, до строки 31, код должен быть понятен, если нет, то в двух словах происходит следующее: мы объявляем контейнер multimap и map , заполняем и выводим их. В 33 и 34 строке используется функция map::count() , которая осуществляет подсчет элементов в контейнерах multimap и map по заданному «ключу». Если такой ключ есть то будет выведено количество «ключей» в map и multimap иначе, будет выведено сообщение, что таких ключей нет В строках 33 и 34 применяется тернарный оператор, про который можно почитать тут.

Функция map::find() осуществляет поиск в контейнере заданного «ключа». Функция принимает один аргумент («ключ» который требуется найти в контейнере map или multimap ). В 37 строке создается итератор itMap указывающий на «ключ» b в контейнере map . В 38 строке создается итератор itMultimap , указывающий на «ключ» а ,но уже в контейнере multimap .

В строке 39 встречается функция map::erase() . Работа этой функции не чем не отличается от работы функции vector::erase() . Функция может принимать один или два аргумента. При принятии одного аргумента из контейнера map или multimap удаляется заданный аргумент, если аргументов двое, то первый аргумент указывает на место откуда начнется удаление, второй по куда будет произведено удаление аргументов. Поскольку итератор itMap указывает на b , а itMultimap указывает на а , то соответственно в 39 строке из контейнера map будет удалено b , а в строке 40 из multimap удалено а . В строке 41 мы говорим итератору itMap , чтобы он указывал на d в контейнере map , соответственно в 42 строке итератор itMultimap начинает указывать тоже на d , но в контейнере multimap . В строке 43 мы очищаем контейнер map начиная с d и до конца map . Тоже происходит в строке 44, но уже с контейнером multimap . В строках 47-49 производится вывод на экран содержимых контейнеров multimap и map после удаления из них элементов.

Функция map::clear() используемая в строке 52 полностью очищает контейнер map . Функцию map::clear() поддерживает и контейнер multumap . Я специально очистил только один контейнер map , что бы на примере функции map::empty() (описанной в 53 и 54 строке) показать, что контейнер действительно пуст. Думаю, работа кода в строках 53 и 54 должна быть понятна.

Похожие статьи