Namespaces
Variants

std::set<Key,Compare,Allocator>:: erase

From cppreference.net

(1)
iterator erase ( iterator pos ) ;
(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)
(3)
iterator erase ( iterator first, iterator last ) ;
(hasta C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(desde C++11)
(constexpr desde C++26)
size_type erase ( const Key & key ) ;
(4) (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.

1,2) Elimina el elemento en la posición pos .

Solo se proporciona una sobrecarga si iterator y const_iterator son del mismo tipo.

(since C++11)
3) Elimina los elementos en el rango [ first , last ) , que debe ser un rango válido en * this .
4) Elimina el elemento (si existe) con la clave equivalente a key .
5) Elimina todos los elementos cuya clave sea equivalente al valor x .
Esta sobrecarga participa en la resolución de sobrecarga solo si Compare es transparent , y ni iterator ni const_iterator son convertibles implícitamente desde K . Permite llamar a esta función sin construir una instancia de Key .

Las referencias e iteradores a los elementos eliminados quedan invalidados. Otras referencias e iteradores no se ven afectados.

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 define 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

1-3) Iterador que sigue al último elemento eliminado.
4) Número de elementos eliminados (0 o 1).
5) Número de elementos eliminados.

Excepciones

1-3) No lanza nada.
4,5) Cualquier excepción lanzada por el objeto Compare .

Complejidad

Dada una instancia c de set :

1,2) Constante amortizada.
3) log ( c. size ( ) ) + std:: distance ( first, last )
4) log ( c. size ( ) ) + c. count ( key )
5) log ( c. size ( ) ) + c. count ( x )

Notas

Macro de prueba de características Valor Std 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 <set>
#include <iostream>
int main()
{
    std::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:

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 130 C++98 el tipo de retorno de las sobrecargas ( 1 ) y ( 3 ) era void (no es
consistente con el requisito erase() en contenedores de secuencia)
corregido a iterator
LWG 2059 C++11 reemplazar la sobrecarga ( 1 ) con la sobrecarga ( 2 ) introdujo una nueva ambigüedad se añadió nuevamente la sobrecarga ( 1 )

Véase también

limpia el contenido
(función miembro pública)