std::set::find în C++

Caută o valoare în set: find() returnează un iterator (sau end()), contains() și count() spun dacă există.

Sintaxă
iterator find(const T& valoare);
bool contains(const T& valoare) const;   // C++20
size_type count(const T& valoare) const;

Ce face std::set::find

Toate trei caută în O(log n). contains (C++20) este cea mai clară când vrei doar un da/nu. count returnează 0 sau 1 la std::set și numărul de apariții la std::multiset. find returnează un iterator, util dacă vrei apoi să ștergi elementul sau să mergi la vecinii lui.

Parametri

Parametru Descriere
valoare Valoarea căutată.

Ce returnează

find: iterator sau end(). contains: bool. count: număr.

Exemple

Exemplul 1: Liste de acces

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

int main() {
    const std::set<std::string> admini{"ana", "radu"};
    for (std::string utilizator : {"radu", "mihai"}) {
        std::println("{}: {}", utilizator, admini.contains(utilizator) ? "admin" : "utilizator obișnuit");
    }
    std::println("count(\"ana\") = {}", admini.count("ana"));

    std::set<int> numere{10, 20, 30, 40};
    auto it = numere.find(30);
    if (it != numere.end()) {
        std::println("Am găsit {}; vecinul din stânga este {}", *it, *std::prev(it));
    }
}

Rezultat

radu: admin
mihai: utilizator obișnuit
count("ana") = 1
Am găsit 30; vecinul din stânga este 20

Greșeli frecvente

  • Folosești std::find din <algorithm> pe un set: caută element cu element (O(n)). Funcția membră s.find folosește ordinea și este mult mai rapidă.

Comenzi înrudite

  • std::set: Mulțime ordonată de valori unice: elimină automat duplicatele și păstrează elementele sortate.
  • std::map::find: find() caută o cheie și returnează un iterator la ea sau end(); count() și contains() spun doar dacă există.
  • std::set::erase: Șterge din set o valoare, elementul indicat de un iterator sau un interval de elemente.