Функция erase_if
Функция erase_if удаляет из map все элементы,
которые удовлетворяют заданному условию. В первый параметр
мы передаем контейнер, из которого нужно удалить элементы,
а во второй - предикат (функцию или лямбда-выражение),
который принимает элемент контейнера и возвращает true,
если элемент нужно удалить, или false, если элемент
следует оставить.
Функция возвращает количество удаленных элементов.
Обратите внимание, что erase_if - это свободная
функция, а не метод класса map, поэтому она
не вызывается через точку.
Синтаксис
erase_if(map, predicate)
Пример
Давайте удалим из map все элементы, значение которых
меньше 30:
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> m = {
{"a", 10},
{"b", 20},
{"c", 30},
{"d", 40},
{"e", 50}
};
int res = erase_if(m, [](const auto& pair) {
return pair.second < 30;
});
cout << res << endl;
for (const auto& pair : m) {
cout << pair.first << " " << pair.second << endl;
}
return 0;
}
Результат выполнения кода:
2
"c 30"
"d 40"
"e 50"
Пример
Давайте удалим из map все элементы, ключ которых
начинается с символа 'a':
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> m = {
{"apple", 1},
{"banana", 2},
{"apricot", 3},
{"cherry", 4},
{"avocado", 5}
};
int res = erase_if(m, [](const auto& pair) {
return pair.first[0] == 'a';
});
cout << res << endl;
for (const auto& pair : m) {
cout << pair.first << " " << pair.second << endl;
}
return 0;
}
Результат выполнения кода:
3
"banana 2"
"cherry 4"
Пример
Давайте удалим из map все элементы, ключ которых
равен "b" или "d":
#include <iostream>
#include <map>
using namespace std;
int main()
{
map<string, int> m = {
{"a", 1},
{"b", 2},
{"c", 3},
{"d", 4},
{"e", 5}
};
int res = erase_if(m, [](const auto& pair) {
return pair.first == "b" || pair.first == "d";
});
cout << res << endl;
for (const auto& pair : m) {
cout << pair.first << " " << pair.second << endl;
}
return 0;
}
Результат выполнения кода:
2
"a 1"
"c 3"
"e 5"