std::set::insert în C++

Adaugă o valoare în set dacă nu există deja și spune prin rezultat dacă a fost adăugată.

Sintaxă
std::pair<iterator, bool> insert(const T& valoare);
void insert(InputIt prim, InputIt ultim);
void insert(std::initializer_list<T> lista);

Ce face std::set::insert

insert pune valoarea la locul ei în ordinea sortată. Dacă valoarea există deja, setul rămâne neschimbat. Rezultatul (pentru o singură valoare) este o pereche: .first este iteratorul la element, .second este true dacă valoarea a fost nouă.

Asta face din insert(...).second un test rapid de tipul „am mai văzut această valoare?”. Există și emplace, care construiește valoarea din argumente.

Parametri

Parametru Descriere
valoare Elementul de adăugat.
prim, ultim / lista Mai multe valori deodată.

Ce returnează

std::pair<iterator, bool> pentru o valoare; nimic pentru interval sau listă.

Exemple

Exemplul 1: Primul duplicat dintr-o listă

#include <print>
#include <set>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> bonuri{"B101", "B205", "B330", "B205", "B412"};
    std::set<std::string> vazute;
    for (const auto& bon : bonuri) {
        if (!vazute.insert(bon).second) {
            std::println("Bon dublat: {}", bon);
        }
    }
    vazute.insert({"B500", "B101"});
    std::println("{}", vazute);
}

Rezultat

Bon dublat: B205
{"B101", "B205", "B330", "B412", "B500"}

Greșeli frecvente

  • Verifici cu find și apoi inserezi: două căutări. insert face ambele și îți spune rezultatul.

Comenzi înrudite

  • std::set: Mulțime ordonată de valori unice: elimină automat duplicatele și păstrează elementele sortate.
  • std::set::find: Caută o valoare în set: find() returnează un iterator (sau end()), contains() și count() spun dacă există.
  • std::map::insert: Adaugă o pereche cheie-valoare doar dacă cheia nu există; spune prin rezultat dacă a adăugat-o.