Ce face std::unordered_set
std::unordered_set ține valori fără repetiții, ca std::set, dar într-o tabelă hash: insert, contains, find și erase durează în medie O(1). Elementele nu sunt sortate, iar ordinea la parcurgere nu este garantată.
std::unordered_multiset este varianta care permite duplicate; count(x) spune de câte ori apare o valoare. La ambele, un rehash (la creștere) invalidează iteratorii.
Parametri
| Parametru | Descriere |
|---|---|
T |
Tipul elementelor; are nevoie de std::hash<T> și de ==. |
Ce returnează
Un obiect unordered_set sau unordered_multiset.
Exemple
Exemplul 1: Elemente comune, afișate sortat
Ordinea din setul neordonat nu este fixă, deci copiem rezultatul într-un vector și îl sortăm înainte de afișare.
#include <algorithm>
#include <print>
#include <string>
#include <unordered_set>
#include <vector>
int main() {
std::vector<std::string> luni{"Ana", "Ion", "Dan", "Maria"};
std::vector<std::string> marti{"Maria", "Radu", "Ana"};
std::unordered_set<std::string> prezenti_luni(luni.begin(), luni.end());
std::vector<std::string> ambele_zile;
for (const auto& nume : marti) {
if (prezenti_luni.contains(nume)) {
ambele_zile.push_back(nume);
}
}
std::ranges::sort(ambele_zile);
std::println("Prezenți în ambele zile: {}", ambele_zile);
}
Rezultat
Prezenți în ambele zile: ["Ana", "Maria"]
Exemplul 2: unordered_multiset: frecvențe
#include <print>
#include <unordered_set>
int main() {
std::unordered_multiset<int> zaruri{6, 2, 6, 3, 6, 2};
for (int fata = 1; fata <= 6; ++fata) {
std::print("{}:{} ", fata, zaruri.count(fata));
}
std::println();
std::unordered_set<int> unice(zaruri.begin(), zaruri.end());
std::println("Valori distincte: {}", unice.size());
}
Rezultat
1:0 2:2 3:1 4:0 5:0 6:3
Valori distincte: 3
Greșeli frecvente
- Afișezi direct un
unordered_setși te bazezi pe ordine. Altă bibliotecă sau alte date dau altă ordine; sortează înainte. - Pui în set structuri proprii fără
std::hash: eroare de compilare. Definește hash-ul sau foloseștestd::setcuoperator<.
Comenzi înrudite
std::set: Mulțime ordonată de valori unice: elimină automat duplicatele și păstrează elementele sortate.std::unordered_map: Dicționar bazat pe tabelă hash: căutare în timp mediu constant, dar fără o ordine anume a elementelor.std::multiset: Mulțime ordonată care permite valori repetate; util pentru valori sortate cu frecvență.