std::multimap<Key,T,Compare,Allocator>::erase
iterator erase( iterator pos ); |
(1) | |
iterator erase( const_iterator pos ); |
(2) | (с C++11) |
| (3) | ||
iterator erase( iterator first, iterator last ); |
(до C++11) | |
iterator erase( const_iterator first, const_iterator last ); |
(с C++11) | |
size_type erase( const Key& key ); |
(4) | |
template< class K > size_type erase( K&& x ); |
(5) | (с C++23) |
Удаляет указанные элементы из контейнера. Порядок оставшихся эквивалентных элементов сохраняется.
1,2) Удаляет элемент по адресу
pos.
3) Удаляет элементы в диапазоне
[first, last), который должен быть допустимым диапазоном в *this.
4) Удаляет все элементы с ключом, эквивалентным
key.
5) Удаляет все элементы с ключом, который сравнивается как эквивалентный значению
x. Эта перегрузка участвует в разрешении перегрузки только в том случае, если квалифицированный идентификатор Compare::is_transparent является допустимым и обозначает тип, и ни iterator ни const_iterator неявно не преобразуются из K. Это позволяет вызвать эту функцию без создания экземпляра Key.Ссылки и итераторы на удалённые элементы становятся недействительными. Другие ссылки и итераторы не затрагиваются.
Итератор pos должен быть допустимым и разрешаемым для доступа. Таким образом, итератор end() (который является допустимым, но недоступным для доступа) не может использоваться как значение для pos.
Параметры
| pos | - | итератор на удаляемый элемент |
| first, last | - | диапазон удаляемых элементов |
| key | - | значение ключа удаляемых элементов |
| x | - | значение любого типа, который может быть прозрачно сравнен с ключом, обозначающим удаляемые элементы |
Возвращаемое значение
1-3) Итератор, следующий за последним удалённым элементом.
4) Количество удалённых элементов.
5) Количество удалённых элементов.
Исключение
1-3) Не выбрасывает исключений.
4,5) Любые исключения, брошенные объектом
Compare.Сложность
При заданном экземпляре c типа multimap:
1,2) Амортизированная константа
3)
log(c.size()) + std::distance(first, last)
4)
log(c.size()) + c.count(key)
5)
log(c.size()) + c.count(x)
Примечания
| Макровыражение проверки наличия функции | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure |
202110L | (C++23) | Гетерогенное удаление в ассоциативных контейнерах и неупорядоченных ассоциативных контейнерах; перегрузка (5) |
Пример
#include <map>
#include <iostream>
int main()
{
std::multimap<int, std::string> c =
{
{1, "one"}, {2, "two"}, {3, "three"},
{4, "four"}, {5, "five"}, {6, "six"}
};
// erase all odd numbers from c
for (auto it = c.begin(); it != c.end();)
{
if (it->first % 2 != 0)
it = c.erase(it);
else
++it;
}
for (auto& p : c)
std::cout << p.second << ' ';
std::cout << '\n';
}Вывод:
two four six
Отчёты об ошибках
Следующие исправляющие ошибки отчёты были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 130 | C++98 | тип возвращаемого значения перегрузок (1) и (3) был void (он не соответствует требованию erase() на контейнеры последовательности) |
исправлено на iterator |
| LWG 371 | C++98 | порядок эквивалентных элементов, которые не были удалены, не был гарантированно сохранён | требуется сохранить |
| LWG 2059 | C++11 | замена перегрузки (1) перегрузкой (2) ввела новую неоднозначность | добавлена перегрузка (1) обратно |
См. также
| очищает содержимое (общедоступная функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/multimap/erase