Espacios de nombres
Variantes
Acciones

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

De cppreference.com
< cpp‎ | container‎ | set
 
 
 
 
(1)
void erase( iterator pos );
(hasta C++11)
iterator erase( iterator pos );
(desde C++11)
iterator erase( const_iterator pos );
(desde C++11)
(2)
void erase( iterator first, iterator last );
(hasta C++11)
iterator erase( const_iterator first, const_iterator last );
(desde C++11)
size_type erase( const Key& key );
(3)
template< class K >
size_type erase( K&& x );
(4) (desde C++23)

Borra del contenedor los elementos especificados.

1) Borra el elemento en la posición pos. Solo se proporciona una sobrecarga si iterator y const_iterator son el mismo tipo. (desde C++11)
2) Borra los elementos en el rango [first; last), que debe ser un rango válido en *this.
3) Borra el elemento (si uno existe) con la clave equivalente a key.
4) Borra el elemento (si uno existe) con la clave que se compara equivalente al valor x. Esta sobrecarga solo participa en la resolución de sobrecargas si el id-calificado Compare::is_transparent es válido y denota un tipo, y ni iterator ni const_iterator es implícitamente convertible de K. Permite llamar a esta función sin construir una instancia de Key.

Se invalidan todas las referencias y los iteradores a los elementos eliminados. No se afectan otras referencias e iteradores.

El iterador pos debe ser válido y desreferenciable. Es por esto que el iterador end() (que es válido, pero no es desreferenciable) no puede usarse como un valor para pos.

Contenido

[editar] Parámetros

pos - Iterador al elemento a borrar.
first, last - Rango de elementos a borrar.
key - Valor de la clave de los elementos a borrar.
x - Un valor de cualquier tipo que se pueda comparar de forma transparente con una clave que indique los elementos a borrar.

[editar] Valor de retorno

1-2) (Ninguno) (hasta C++11)Iterador que sigue al último elemento borrado. (desde C++11)
3,4) Número de elementos borrados (0 o 1).

[editar] Excepciones

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

[editar] Complejidad

Dada una instancia c de tipo set:

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

[editar] Ejemplo

#include <...>
#include <iostream>
int main()
{
    std::set<int> c = { 1, 2, 3, 4,    1, 2, 3, 4 };
 
    auto imprimir = [&c] {
        std::cout << "c = { ";
        for(int n : c)
            std::cout << n << ' ';
        std::cout << "}\n";
    };
    imprimir();
 
    std::cout << "Borrar todos los números nones:\n";
    for(auto it = c.begin(); it != c.end(); ) {
        if(*it % 2 != 0)
            it = c.erase(it);
        else
            ++it;
    }
    imprimir();
 
    std::cout << "Borrar 1, se borraron: " << c.erase(1) << '\n';
    std::cout << "Borrar 2, se borraron: " << c.erase(2) << '\n';
    std::cout << "Borrar 2, se borraron: " << c.erase(2) << '\n';
    imprimir();
}

Salida:

c = { 1 2 3 4 }
Borrar todos los números nones:
c = { 2 4 }
Borrar 1, se borraron: 0
Borrar 2, se borraron: 1
Borrar 2, se borraron: 0
c = { 4 }


[editar] Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 2059 C++11 La sobrecarga para un const_iterator introdujo una nueva ambigüedad. Se agregó la sobrecarga para iterator.

[editar] Véase también

Borra el contenido.
(función miembro pública) [editar]