C++ Std::Map::Erase Примеры

C Std Map Erase Primery



Среди множества операций, доступных для «std::map», функция «erase» выделяется как важнейший инструмент для удаления элементов на основе их ключей. «std::map» — это организованный ассоциативный контейнер, состоящий из пар ключ-значение. Расположение элементов в «std::map» последовательно сортируется в соответствии с их ключами, что облегчает выполнение эффективных операций, таких как поиск, вставка и удаление, на основе значений ключей.

В области C++ функция «std::map::erase» служит функцией-членом класса «std::map», позволяя удалять определенные элементы с карты. Он существует в различных формах, что обеспечивает гибкость в выборе элементов для удаления. В этой статье мы углубимся в детали «std::map::erase», приведя несколько примеров, иллюстрирующих его универсальность.







Пример 1: Удаление с помощью ключа

Возможность стирать элементы по ключу в «std::map» — фундаментальная функция, предоставляемая стандартной библиотекой шаблонов C++. Эта операция обычно используется, когда вам нужно управлять парами «ключ-значение» и манипулировать ими в программе, и она обеспечивает удобный способ удаления определенных элементов на основе их ключей. Мы создадим пример, чтобы продемонстрировать, как использовать «std::map» для создания карты, стирания элемента по ключу и затем отображения измененной карты.



#include
#include <карта>

int главный ( ) {
станд::карта < интервал, станд::строка > мояКарта;
моя карта [ 1 ] '=' 'Красный' ;
моя карта [ 2 ] '=' 'Синий' ;
моя карта [ 3 ] '=' 'Зеленый' ;

myMap.erase ( 2 ) ;

для ( константное авто & пара: myMap ) {
станд::cout << пара.первая << ': ' << пара.секунда << станд::эндл;
}

возвращаться 0 ;
}


В этом примере мы начинаем с включения необходимых стандартных библиотек C++, таких как и , чтобы разрешить использование операций ввода-вывода и контейнера «std::map» соответственно. В функции «main» мы инициализируем «std::map» с именем «myMap», где целочисленные ключи связаны с соответствующими строковыми значениями. На карту добавляются три пары ключ-значение, которые представляют цвета: «Красный» для ключа 1, «Синий» для ключа 2 и «Зеленый» для ключа 3. Затем мы используем функцию-член «erase» из « std::map», чтобы удалить элемент, связанный с ключом 2, с нашей карты. Следовательно, после этой операции «синий» цвет больше не является частью карты.



Чтобы продемонстрировать итоговое состояние карты, мы используем цикл «for», который перебирает каждую пару ключ-значение в «myMap». Мы используем объект «std::cout» внутри цикла для вывода каждой пары ключ-значение на консоль. Наконец, оператор return 0 завершает «основную» функцию, которая сигнализирует об успешном выполнении нашей программы.





В выходных данных отображаются оставшиеся пары ключ-значение в «std::map» после удаления элемента с ключом 2 («Синий»), что приводит к выходным данным «1: Красный» и «3: Зеленый».



Пример 2: Стирание с помощью итератора

В C++ итераторы — это объекты, которые облегчают навигацию по элементам внутри контейнера, предлагая средства доступа, изменения или удаления элементов. Функцию std::map::erase также можно использовать с итераторами для удаления элементов.

Вот пример:

#include
#include <карта>

int главный ( ) {
станд::карта < интервал, станд::строка > фруктовая папка;
фруктыПапка [ 1 ] '=' 'Манго' ;
фруктыПапка [ 2 ] '=' 'Апельсин' ;
фруктыПапка [ 3 ] '=' 'Ананас' ;
фруктыПапка [ 4 ] '=' 'Виноград' ;

авто это = FruitMap.find ( 2 ) ;

если ( это ! = FruitMap.end ( ) ) {
FruitMap.erase ( это ) ;
}

для ( константное авто & пара: FruitMap ) {
станд::cout << пара.первая << ': ' << пара.секунда << станд::эндл;
}

возвращаться 0 ;
}


Предоставленный код C++ начинается с объявления «std::map» с именем «fruitMap» для хранения пар ключ-значение, связывая целые числа с соответствующими названиями фруктов. Мы заполняем карту записями для четырех разных фруктов: «Манго», «Апельсин», «Ананас» и «Виноград». После этого мы используем функцию «найти», чтобы получить итератор (it), который указывает на элемент со значением ключа 2 в «fruitMap». Затем мы проверяем, не равен ли итератор «end()», чтобы убедиться, что элемент с указанным ключом существует на карте.

В условном блоке мы стираем элемент, на который указывает итератор «it», с помощью функции «erase». Наконец, мы перебираем оставшиеся элементы в модифицированном «fruitMap», используя цикл «for».

В конечном результате отображается измененное содержимое «fruitMap» после стирания.

Пример 3: Удаление диапазона

Контейнер std::map в C++ предоставляет удобный метод удаления элементов в указанном диапазоне. Функция «стереть» позволяет удалять элементы с карты на основе итераторов, которые представляют начало и конец удаляемого диапазона.

Теперь давайте рассмотрим концепцию удаления диапазона с помощью «std::map» на примере:

#include
#include <карта>

int главный ( ) {
станд::карта < интервал, станд::строка > новаяКарта;
новая карта [ 1 ] '=' 'Лошадь' ;
новая карта [ 2 ] '=' 'Лев' ;
новая карта [ 3 ] '=' «Тигр» ;
новая карта [ 4 ] '=' 'Кот' ;

новая карта.erase ( newMap.lower_bound ( 2 ) , newMap.upper_bound ( 3 ) ) ;

для ( константное авто & пара: новая карта ) {
станд::cout << пара.первая << ': ' << пара.секунда << станд::эндл;
}

возвращаться 0 ;
}


Программа начинается с объявления объекта «std::map» с именем «newMap», который связывает целочисленные ключи с соответствующими строковыми значениями. После этого мы заполняем карту парами ключ-значение, используя оператор квадратных скобок. Например, мы назначаем пары ключ-значение (1, «Лошадь»), (2, «Лев»), (3, «Тигр») и (4, «Кошка») для «newMap».

Следующая важная операция предполагает использование итераторов для удаления элементов с карты. Функция стирания используется с аргументами «newMap.lower_bound(2)» и «newMap.upper_bound(3)». При этом удаляются элементы с ключами, попадающими в диапазон (2, 3). Другими словами, он удаляет с карты записи «Лев» и «Тигр». После этой операции на карте останутся только элементы с ключами 1 и 4, соответствующие «Лошади» и «Кошке».

Наконец, мы используем цикл for на основе диапазона для перебора оставшихся элементов на карте и вывода их пар ключ-значение на консоль.

В результате на выходе отображается следующее:

Пример 4. Стирание на основе предиката

Стирание на основе предиката означает удаление элементов из структуры данных, например контейнера, на основе заданного условия или критериев. «std::map::erase» также можно использовать с функцией-предикатом для условного удаления элементов. Давайте рассмотрим следующий пример:

#include
#include <карта>
#include <алгоритм>

int главный ( ) {

станд::карта < интервал, станд::строка > мояКарта = {
{ 1 , «Январь» } ,
{ 2 , «Февраль» } ,
{ 3 , 'Маршировать' } ,
{ 4 , 'Апрель' } ,
{ 5 , 'Может' }
} ;

автоматический предикат = [ ] ( константный станд::пара < интервал, станд::строка >& элемент ) {
возвращаться элемент.секунда.длина ( ) < 5 ;
} ;

myMap.erase ( станд::remove_if ( myMap.begin ( ) , myMap.end ( ) , предикат ) , myMap.end ( ) ) ;

станд::cout << ' \п Карта после стирания элементов на основе предиката:' << станд::эндл;
для ( константное авто & пара: myMap ) {
станд::cout << пара.первая << ': ' << пара.секунда << станд::эндл;
}

возвращаться 0 ;
}


Программа начинается с включения необходимых файлов заголовков. «std::map» под названием «myMap» объявляется и инициализируется в «main» функции. Он содержит пары ключ-значение, которые представляют названия месяцев и их соответствующие числовые значения. Впоследствии определяется «лямбда»-функция (предикат). Эта функция «лямбда» служит предикатом для алгоритма «std::remove_if». Он проверяет, составляет ли длина строкового значения, связанного с элементом карты, менее пяти символов.

Затем алгоритм «std::remove_if» используется вместе с функцией «erase» из «std::map». Эта комбинация удаляет элементы с карты на основе допустимости предиката.

После запуска программы элементы с ключами меньше пяти удаляются из исходной карты, демонстрируя стирание на основе предиката с использованием «std::map».

Заключение

В заключение отметим, что функция «std::map::erase» — это универсальный инструмент C++ для удаления элементов из «std::map». Независимо от того, выполняется ли стирание по ключу, итератору, диапазону или на основе предиката, функция «std::map::erase» обеспечивает гибкость и простоту использования. Освоив эту функцию, разработчики C++ могут эффективно управлять данными в контейнерах «std::map», делая свой код более надежным и простым в обслуживании.