std::set::erase în C++

Șterge din set o valoare, elementul indicat de un iterator sau un interval de elemente.

Sintaxă
size_type erase(const T& valoare);
iterator erase(iterator poz);
iterator erase(const_iterator prim, const_iterator ultim);

Ce face std::set::erase

erase(valoare) șterge valoarea dacă există și returnează câte elemente a șters (0 sau 1 la std::set, oricâte la std::multiset). erase(it) returnează iteratorul elementului următor. Se invalidează doar iteratorii la elementele șterse.

Parametri

Parametru Descriere
valoare Valoarea de șters.
poz / prim, ultim Iteratorul sau intervalul de șters.

Ce returnează

Numărul de elemente șterse, sau iteratorul următor.

Exemple

Exemplul 1: Ștergerea după valoare și a unui interval

#include <print>
#include <set>

int main() {
    std::set<int> locuri_libere{3, 7, 12, 15, 21, 30};
    std::println("Șters 12: {}", locuri_libere.erase(12));
    std::println("Șters 99: {}", locuri_libere.erase(99));

    // ștergem toate locurile de la 15 la 25
    locuri_libere.erase(locuri_libere.lower_bound(15), locuri_libere.upper_bound(25));
    std::println("{}", locuri_libere);
}

Rezultat

Șters 12: 1
Șters 99: 0
{3, 7, 30}

Greșeli frecvente

  • Ștergi într-o buclă cu s.erase(it); ++it;. Folosește it = s.erase(it); sau std::erase_if(s, conditie).

Comenzi înrudite

  • std::set: Mulțime ordonată de valori unice: elimină automat duplicatele și păstrează elementele sortate.
  • std::map::erase: Șterge din map o cheie (cu valoarea ei), elementul indicat de un iterator sau un interval.
  • std::erase_if: Șterge dintr-un container toate elementele egale cu o valoare (std::erase) sau care îndeplinesc o condiție (std::erase_if).