InformaticăliceuClasa 10mediu
STL Map și Set în C++ - Containere Asociative
Folosește map, set, unordered_map și unordered_set pentru căutări și asocieri eficiente.
3 luni în urmă
0 vizualizări
25 minute
STL Map și Set în C++
std::set - Mulțime Ordonată
Stochează elemente unice în ordine sortată.
1#include <iostream> 2#include <set> 3using namespace std; 4 5int main() { 6 set<int> s; 7 8 // Inserare 9 s.insert(30); 10 s.insert(10); 11 s.insert(20); 12 s.insert(10); // Ignorat (duplicat) 13 14 // Parcurgere (în ordine) 15 for (int x : s) { 16 cout << x << " "; // 10 20 30 17 } 18 cout << endl; 19 20 // Căutare 21 if (s.find(20) != s.end()) { 22 cout << "20 găsit" << endl; 23 } 24 25 // Sau cu count 26 if (s.count(20) > 0) { 27 cout << "20 există" << endl; 28 } 29 30 // Ștergere 31 s.erase(10); 32 33 // Dimensiune 34 cout << "Size: " << s.size() << endl; 35 36 return 0; 37}
std::map - Dicționar Ordonat
Stochează perechi cheie-valoare ordonate după cheie.
1#include <iostream> 2#include <map> 3using namespace std; 4 5int main() { 6 map<string, int> varste; 7 8 // Inserare 9 varste["Ion"] = 25; 10 varste["Maria"] = 30; 11 varste.insert({"Andrei", 22}); 12 13 // Acces 14 cout << varste["Ion"] << endl; // 25 15 16 // Atenție: operatorul [] creează intrare dacă nu există! 17 cout << varste["Necunoscut"] << endl; // 0 (creat automat) 18 19 // Verificare existență 20 if (varste.find("Maria") != varste.end()) { 21 cout << "Maria există" << endl; 22 } 23 24 // Parcurgere 25 for (auto& [nume, varsta] : varste) { 26 cout << nume << ": " << varsta << endl; 27 } 28 29 return 0; 30}
Unordered Variants (Hash-based)
1#include <unordered_set> 2#include <unordered_map> 3 4// Nu sunt ordonate, dar O(1) în medie pentru operații 5unordered_set<int> us; 6unordered_map<string, int> um;
Multiset și Multimap
Permit duplicate.
1#include <set> 2#include <map> 3 4multiset<int> ms; 5ms.insert(5); 6ms.insert(5); 7ms.insert(5); 8cout << ms.count(5) << endl; // 3 9 10multimap<string, int> mm; 11mm.insert({"Ana", 25}); 12mm.insert({"Ana", 30}); // Permis
Exemplu: Frecvența Cuvintelor
1#include <iostream> 2#include <map> 3#include <sstream> 4using namespace std; 5 6int main() { 7 string text = "ana are mere ana are pere"; 8 map<string, int> frecventa; 9 10 stringstream ss(text); 11 string cuvant; 12 13 while (ss >> cuvant) { 14 frecventa[cuvant]++; 15 } 16 17 for (auto& [cuv, freq] : frecventa) { 18 cout << cuv << ": " << freq << endl; 19 } 20 // ana: 2, are: 2, mere: 1, pere: 1 21 22 return 0; 23}
Complexitate
| Container | Inserare | Căutare | Ștergere |
|---|---|---|---|
| set/map | O(log n) | O(log n) | O(log n) |
| unordered_set/map | O(1)* | O(1)* | O(1)* |
*În medie; worst case O(n)
Tutorialul te-a ajutat?
Dacă ai nevoie de ajutor personalizat, găsește un profesor calificat pentru meditații
