std::multimap<Key,T,Compare,Allocator>:: erase
|
iterator erase
(
iterator pos
)
;
|
(1) | (constexpr начиная с C++26) |
|
iterator erase
(
const_iterator pos
)
;
|
(2) |
(начиная с C++11)
(constexpr начиная с C++26) |
| (3) | ||
|
iterator erase
(
iterator first, iterator last
)
;
|
(до C++11) | |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(начиная с C++11)
(constexpr начиная с C++26) |
|
|
size_type erase
(
const
Key
&
key
)
;
|
(4) | (constexpr начиная с C++26) |
|
template
<
class
K
>
size_type erase ( K && x ) ; |
(5) |
(начиная с C++23)
(constexpr начиная с C++26) |
Удаляет указанные элементы из контейнера. Порядок оставшихся эквивалентных элементов сохраняется.
[
first
,
last
)
, который должен быть корректным диапазоном в
*
this
.
Compare
является
прозрачным
, и ни
iterator
, ни
const_iterator
не являются неявно преобразуемыми из
K
. Это позволяет вызывать данную функцию без создания экземпляра
Key
.
Ссылки и итераторы на удаленные элементы становятся недействительными. Остальные ссылки и итераторы не затрагиваются.
Итератор pos должен быть разыменовываемым. Следовательно, итератор end() (который является валидным, но не может быть разыменован) не может использоваться в качестве значения для pos .
Содержание |
Параметры
| pos | - | итератор на удаляемый элемент |
| first, last | - | пара итераторов, определяющих диапазон удаляемых элементов |
| key | - | ключевое значение удаляемых элементов |
| x | - | значение любого типа, которое может быть прозрачно сравнено с ключом, обозначающим удаляемые элементы |
Возвращаемое значение
Исключения
Compare
.
Сложность
Дана переменная
c
типа
multimap
:
Примечания
| Feature-test макрос | Значение | Стандарт | Функциональность |
|---|---|---|---|
__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"} }; // удалить все нечетные числа из 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 | Applied to | Behavior as published |
Correct behavior
|
|---|---|---|---|
| LWG 130 | C++98 |
the return type of overloads
(
1
)
and
(
3
)
was
void
(it is not
consistent with the
erase()
requirement on sequence containers)
|
corrected to
iterator
|
| LWG 371 | C++98 |
the order of equivalent elements that are not
erased was not guaranteed to be preserved |
required to be preserved |
| LWG 2059 | C++11 | replacing overload ( 1 ) with overload ( 2 ) introduced new ambiguity | added overload ( 1 ) back |
Смотрите также
|
очищает содержимое
(публичная функция-член) |