set library
Főnév
set library (tsz. set libraries)
- (informatika) A
seta C++ Standard Template Library (STL) egyik adatszerkezete, amely egy rendezett, egyedi elemeket tartalmazó gyűjtemény. Azstd::seta piros-fekete fa (Red-Black Tree) alapú megvalósítás miatt logaritmikus időben (O(log n)) végez keresést, beszúrást és törlést.
A set használatához az #include <set> fejlécet kell beilleszteni a programba.
1. set létrehozása és alapvető használata
Egy set létrehozása egyszerű, és az elemek automatikusan növekvő sorrendbe kerülnek.
Példa: Alapvető set műveletek
#include <iostream>
#include <set>
int main() {
std::set<int> szamok = {5, 3, 8, 1, 5}; // Egyedi elemek
szamok.insert(10); // Új elem beszúrása
szamok.insert(3); // Nem adja hozzá, mert már létezik
std::cout << "A set elemei: ";
for (int szam : szamok) {
std::cout << szam << " ";
}
std::cout << std::endl;
return 0;
}
✅ A set automatikusan rendezi az elemeket!
✅ Az ismétlődő elemek nem kerülnek bele!
Kimenet:
A set elemei: 1 3 5 8 10
2. Elemműveletek (insert, erase, find)
Elemek beszúrása (insert)
szamok.insert(20); // Hozzáadja a 20-at a halmazhoz
🔹 Ha az elem már benne van, nem történik semmi.
Elem keresése (find)
if (szamok.find(8) != szamok.end()) {
std::cout << "A 8 benne van a halmazban!" << std::endl;
} else {
std::cout << "A 8 nincs benne!" << std::endl;
}
🔹 find(x) visszaad egy iterátort az x elemre, vagy end() ha nincs benne.
Elem törlése (erase)
szamok.erase(3); // Kitörli a 3-as számot
🔹 Ha az elem nincs benne, nem történik semmi.
Összes elem törlése (clear)
szamok.clear(); // Minden elem törlése
3. Halmazműveletek
A set lehetővé teszi a halmazműveleteket, mint a metszet, unió és különbség.
Metszet (közös elemek)
#include <iostream>
#include <set>
#include <algorithm>
int main() {
std::set<int> A = {1, 2, 3, 4, 5};
std::set<int> B = {3, 4, 5, 6, 7};
std::set<int> metszet;
std::set_intersection(A.begin(), A.end(), B.begin(), B.end(),
std::inserter(metszet, metszet.begin()));
std::cout << "Metszet: ";
for (int elem : metszet) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
Kimenet:
Metszet: 3 4 5
Unió (összes egyedi elem)
std::set<int> unio;
std::set_union(A.begin(), A.end(), B.begin(), B.end(),
std::inserter(unio, unio.begin()));
Különbség (A - B)
std::set<int> kulonbseg;
std::set_difference(A.begin(), A.end(), B.begin(), B.end(),
std::inserter(kulonbseg, kulonbseg.begin()));
4. set speciális funkciói
size(), empty() és count()
std::cout << "Elemek száma: " << szamok.size() << std::endl;
std::cout << "Üres? " << (szamok.empty() ? "Igen" : "Nem") << std::endl;
std::cout << "Benne van a 10? " << szamok.count(10) << std::endl;
🔹 size() – Az elemek számát adja vissza.
🔹 empty() – Igaz, ha üres.
🔹 count(x) – Ha az x benne van, 1-et ad vissza, különben 0-t.
5. Rendezés és fordított sorrend
A set alapértelmezett sorrendje növekvő.
Fordított sorrend (greater<T>)
std::set<int, std::greater<int>> fordított_szamok = {10, 5, 8, 3, 1};
🔹 Ez csökkenő sorrendben tárolja az elemeket.
6. unordered_set – Gyorsabb alternatíva
Ha nem számít a sorrend, használhatjuk az unordered_set-et, amely hash táblán alapul és átlagosan O(1) műveleteket biztosít.
#include <iostream>
#include <unordered_set>
int main() {
std::unordered_set<int> szamok = {5, 3, 8, 1, 5};
szamok.insert(10);
std::cout << "Az unordered_set elemei: ";
for (int szam : szamok) {
std::cout << szam << " ";
}
std::cout << std::endl;
return 0;
}
🔹 Rendezetlen, de gyorsabb keresés és beszúrás (O(1) átlagosan).
Összegzés
Az std::set egy hatékony adatszerkezet, ha egyedi és rendezett elemeket szeretnénk tárolni: ✅ Automatikusan rendezett
✅ Ismétlődő elemeket nem tartalmaz
✅ O(log n) keresés, beszúrás és törlés
✅ Könnyen végezhető halmazműveletek
Ha sebesség a legfontosabb és nem kell rendezett adatszerkezet, az unordered_set jobb választás. 🚀
- set library - Szótár.net (en-hu)
- set library - Sztaki (en-hu)
- set library - Merriam–Webster
- set library - Cambridge
- set library - WordNet
- set library - Яндекс (en-ru)
- set library - Google (en-hu)
- set library - Wikidata
- set library - Wikipédia (angol)