std::unordered_multiset<Key,Hash,KeyEqual,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(начиная с C++11)
(до C++23) |
|
|
iterator erase
(
iterator pos
)
requires ( ! std:: same_as < iterator, const_iterator > ) ; |
(начиная с C++23)
(constexpr начиная с C++26) |
|
|
iterator erase
(
const_iterator pos
)
;
|
(2) |
(начиная с C++11)
(constexpr начиная с C++26) |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(3) |
(начиная с C++11)
(constexpr начиная с C++26) |
|
size_type erase
(
const
Key
&
key
)
;
|
(4) |
(начиная с C++11)
(constexpr начиная с C++26) |
|
template
<
class
K
>
size_type erase ( K && x ) ; |
(5) |
(начиная с C++23)
(constexpr начиная с C++26) |
Удаляет указанные элементы из контейнера. Порядок оставшихся элементов сохраняется. (Это позволяет удалять отдельные элементы при итерации по контейнеру.)
iterator
и
const_iterator
являются одним и тем же типом.
[
first
,
last
)
, который должен быть корректным диапазоном в
*
this
.
Hash
и
KeyEqual
являются
прозрачными
, и ни
iterator
, ни
const_iterator
не являются неявно преобразуемыми из
K
. Предполагается, что такой
Hash
может быть вызван как с типом
K
, так и с типом
Key
, и что
KeyEqual
является прозрачным, что в совокупности позволяет вызывать эту функцию без создания экземпляра
Key
.
Ссылки и итераторы на удаленные элементы становятся недействительными. Другие итераторы и ссылки не становятся недействительными.
Итератор pos должен быть разыменовываемым. Следовательно, итератор end() (который является валидным, но не может быть разыменован) не может использоваться в качестве значения для pos .
Содержание |
Параметры
| pos | - | итератор на удаляемый элемент |
| first, last | - | пара итераторов, определяющих диапазон удаляемых элементов |
| key | - | ключевое значение удаляемых элементов |
| x | - | значение любого типа, которое может быть прозрачно сравнено с ключом, обозначающим удаляемые элементы |
Возвращаемое значение
Исключения
Hash
и
KeyEqual
.
Сложность
Дано экземпляр
c
контейнера
unordered_multiset
:
Примечания
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | Гетерогенное удаление в ассоциативных контейнерах и неупорядоченных ассоциативных контейнерах ; перегрузка ( 5 ) |
Пример
#include <unordered_set> #include <iostream> int main() { std::unordered_multiset<int> c = {1, 2, 3, 4, 1, 2, 3, 4}; auto print = [&c] { std::cout << "c = { "; for (int n : c) std::cout << n << ' '; std::cout << "}\n"; }; print(); std::cout << "Удалить все нечетные числа:\n"; for (auto it = c.begin(); it != c.end();) { if (*it % 2 != 0) it = c.erase(it); else ++it; } print(); std::cout << "Удалить 1, количество удаленных: " << c.erase(1) << '\n'; std::cout << "Удалить 2, количество удаленных: " << c.erase(2) << '\n'; std::cout << "Удалить 2, количество удаленных: " << c.erase(2) << '\n'; print(); }
Возможный вывод:
c = { 1 1 2 2 3 3 4 4 }
Erase all odd numbers:
c = { 2 2 4 4 }
Erase 1, erased count: 0
Erase 2, erased count: 2
Erase 2, erased count: 0
c = { 4 4 }
Отчёты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение как опубликовано | Корректное поведение |
|---|---|---|---|
| LWG 2059 | C++11 | существовала неоднозначность для перегрузки ( 2 ) | добавлена перегрузка ( 1 ) |
| LWG 2356 | C++11 |
порядок неэквивалентных элементов, которые
не удаляются, не гарантировалось сохранить |
требуется сохранять |
Смотрите также
|
очищает содержимое
(публичная функция-член) |