0Pricing
C++ Academy · Lezione

unordered_set

Elementi unici basati su hash

unordered_set è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Che cos'è unordered_set?

std::unordered_set memorizza elementi unici in una tabella hash. In media, i controlli di appartenenza richiedono un tempo costante, ma non esiste un ordine ordinato.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3, 2, 1};
    std::cout << s.size() << " unique values\n";
    return 0;
}

set e unordered_set

Come per le map:

  • set: ordinato, O(log n).
  • unordered_set: non ordinato, O(1) in media.

Scelga unordered_set per ottenere i controlli di appartenenza più rapidi.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> seen{"a", "b", "c"};
    std::cout << (seen.count("b") ? "yes" : "no") << '\n';
    return 0;
}

Inserire valori

insert() aggiunge un elemento, lo ignora se è già presente e restituisce una coppia il cui .second indica se l'elemento è stato aggiunto.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s;
    auto a = s.insert(5);
    auto b = s.insert(5);
    std::cout << std::boolalpha << a.second << ' ' << b.second << '\n';
    return 0;
}

Controlli rapidi di appartenenza

Verificare se un valore è già stato visto è il caso d'uso classico. count() restituisce 0 o 1.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> blocked{"spam", "junk"};
    std::cout << blocked.count("spam") << '\n';
    std::cout << blocked.count("ok") << '\n';
    return 0;
}

Cancellare elementi

erase() rimuove un valore e restituisce quanti elementi sono stati rimossi (0 o 1).

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3};
    s.erase(2);
    std::cout << "count 2: " << s.count(2) << '\n';
    std::cout << "size: " << s.size() << '\n';
    return 0;
}

Rilevare i duplicati

È possibile rilevare il primo duplicato in un flusso inserendo l'elemento e controllando il risultato booleano.

#include <iostream>
#include <unordered_set>

int main() {
    int data[] = {3, 7, 1, 7, 9};
    std::unordered_set<int> seen;
    for (int x : data) {
        if (!seen.insert(x).second) {
            std::cout << "first duplicate: " << x << '\n';
            break;
        }
    }
    return 0;
}

Iterare

L'iterazione funziona, ma l'ordine è non specificato. Sommi o elabori gli elementi senza dare per scontata una sequenza.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{10, 20, 30};
    int total = 0;
    for (int x : s) total += x;
    std::cout << "sum = " << total << '\n';
    return 0;
}

Eliminare i duplicati da un intervallo

Costruisca un unordered_set a partire da un intervallo per eliminare rapidamente i duplicati (l'ordine non viene preservato).

#include <iostream>
#include <unordered_set>
#include <vector>

int main() {
    std::vector<int> v{1, 2, 2, 3, 3, 3};
    std::unordered_set<int> u(v.begin(), v.end());
    std::cout << u.size() << " unique\n";
    return 0;
}

find e count

find() fornisce un iteratore all'elemento, così può utilizzarlo ulteriormente, mentre count() segnala solo la presenza.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> s{"alpha", "beta"};
    auto it = s.find("beta");
    std::cout << (it != s.end() ? *it : "none") << '\n';
    return 0;
}

Svuotare e verificare se è vuoto

clear() rimuove tutti gli elementi e empty() verifica che non ce ne siano.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> s{1, 2, 3};
    s.clear();
    std::cout << std::boolalpha << s.empty() << '\n';
    return 0;
}

Intersezione di set

Per trovare gli elementi comuni, iteri su un set e verifichi l'appartenenza nell'altro.

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> a{1, 2, 3, 4};
    std::unordered_set<int> b{3, 4, 5};
    for (int x : a) if (b.count(x)) std::cout << x << ' ';
    std::cout << '\n';
    return 0;
}

Verifica rapida

Verifichi la Sua comprensione di unordered_set.

Riepilogo

Ha imparato che std::unordered_set:

  • memorizza elementi unici con operazioni O(1) in media
  • non ha un ordine garantito
  • è ideale per controlli rapidi di appartenenza e per rilevare duplicati

Ora imparerà a creare hash per i propri tipi personalizzati.

Domande Frequenti

La lezione «unordered_set» è gratuita?

Sì — il testo completo di «unordered_set» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «unordered_set»?

Elementi unici basati su hash Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «unordered_set»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. std::unordered_map
  2. unordered_set
  3. Funzioni hash personalizzate
  4. Considerazioni sulle prestazioni
← Torna a C++ Academy