std::unordered_set<Key,Hash,KeyEqual,Allocator>:: erase
| (1) | ||
|
iterator erase
(
iterator pos
)
;
|
(desde C++11)
(hasta C++23) |
|
|
iterator erase
(
iterator pos
)
requires ( ! std:: same_as < iterator, const_iterator > ) ; |
(desde C++23)
(constexpr desde C++26) |
|
|
iterator erase
(
const_iterator pos
)
;
|
(2) |
(desde C++11)
(constexpr desde C++26) |
|
iterator erase
(
const_iterator first, const_iterator last
)
;
|
(3) |
(desde C++11)
(constexpr desde C++26) |
|
size_type erase
(
const
Key
&
key
)
;
|
(4) |
(desde C++11)
(constexpr desde C++26) |
|
template
<
class
K
>
size_type erase ( K && x ) ; |
(5) |
(desde C++23)
(constexpr desde C++26) |
Elimina los elementos especificados del contenedor. Se preserva el orden de los elementos restantes. (Esto hace posible eliminar elementos individuales mientras se itera a través del contenedor.)
iterator
y
const_iterator
son el mismo tipo.
[
first
,
last
)
, que debe ser un rango válido en
*
this
.
Hash
y
KeyEqual
son ambos
transparentes
, y ni
iterator
ni
const_iterator
son convertibles implícitamente desde
K
. Esto asume que dicho
Hash
puede ser invocado tanto con el tipo
K
como con el tipo
Key
, y que el
KeyEqual
es transparente, lo que, en conjunto, permite llamar a esta función sin construir una instancia de
Key
.
Las referencias e iteradores a los elementos eliminados quedan invalidados. Otros iteradores y referencias no se invalidan.
El iterador pos debe ser dereferenciable. Por lo tanto, el iterador end() (que es válido, pero no es dereferenciable) no puede usarse como valor para pos .
Contenidos |
Parámetros
| pos | - | iterador al elemento a eliminar |
| first, last | - | el par de iteradores que definen el rango de elementos a eliminar |
| key | - | valor clave de los elementos a eliminar |
| x | - | un valor de cualquier tipo que puede compararse transparentemente con una clave que denota los elementos a eliminar |
Valor de retorno
Excepciones
Hash
y
KeyEqual
.
Complejidad
Dada una instancia
c
de
unordered_set
:
Notas
| Macro de prueba de características | Valor | Estándar | Característica |
|---|---|---|---|
__cpp_lib_associative_heterogeneous_erasure
|
202110L
|
(C++23) | Borrado heterogéneo en contenedores asociativos y contenedores asociativos no ordenados ; sobrecarga ( 5 ) |
Ejemplo
#include <unordered_set> #include <iostream> int main() { std::unordered_set<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 << "Erase all odd numbers:\n"; for (auto it = c.begin(); it != c.end();) { if (*it % 2 != 0) it = c.erase(it); else ++it; } print(); std::cout << "Erase 1, erased count: " << c.erase(1) << '\n'; std::cout << "Erase 2, erased count: " << c.erase(2) << '\n'; std::cout << "Erase 2, erased count: " << c.erase(2) << '\n'; print(); }
Salida posible:
c = { 1 2 3 4 }
Erase all odd numbers:
c = { 2 4 }
Erase 1, erased count: 0
Erase 2, erased count: 1
Erase 2, erased count: 0
c = { 4 }
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 2059 | C++11 | existía ambigüedad para la sobrecarga ( 2 ) | se añadió sobrecarga ( 1 ) |
| LWG 2356 | C++11 |
el orden de elementos no equivalentes que
no se borraban no estaba garantizado que se preservara |
se requiere que se preserve |
Véase también
|
limpia el contenido
(función miembro pública) |