std::set union
Megjelenés
Főnév
std::set union (tsz. std::set unions)
- (informatika) A
std::set_uniona C++ STL egyik halmazművelet algoritmusa, amely két rendezett tartomány unióját számítja ki:
👉 az unió alatt azt értjük, hogy az eredmény tartalmazza:
- az összes elemet az első tartományból ÉS az összes elemet a másodikból,
- minden elem csak egyszer szerepel → a duplikált elemeket egyszer veszi be.
🕹️ Szintaxis
std::set_union(first1, last1, first2, last2, result);
first1,last1→ első tartomány kezdete és vége (iterátorok)first2,last2→ második tartomány kezdete és vége (iterátorok)result→ az eredmény tartomány kezdő iterátora (általábanstd::back_insertervagystd::inserter).
⚙️ Hogyan működik?
- Mindkét bemenetet végigjárja egyszerre.
- Mindig a kisebb elemet illeszti be az eredménybe.
- Ha két elem egyenlő, akkor csak egyszer illeszti be.
- Garantált, hogy az eredmény is rendezett lesz.
Időkomplexitás:
- O(n1 + n2), ahol n1 és n2 a két tartomány mérete.
📝 Példa
#include <iostream>
#include <set>
#include <algorithm>
int main() {
std::set<int> set1 = {1, 2, 3, 4, 5};
std::set<int> set2 = {3, 4, 5, 6, 7};
std::set<int> unionSet;
std::set_union(set1.begin(), set1.end(), set2.begin(), set2.end(),
std::inserter(unionSet, unionSet.begin()));
std::cout << "Unió eredménye: ";
for (int num : unionSet) {
std::cout << num << " ";
}
return 0;
}
Kimenet:
Unió eredménye: 1 2 3 4 5 6 7
Mire jó?
✅ Halmazműveletek → unió kiszámítása. ✅ Ha két rendezett tartományból kell összegyűjteni az elemeket, ismétlődések nélkül. ✅ Adattisztítás → összevonás több adatforrásból. ✅ Statisztikai, matematikai feldolgozás.
Fontos megjegyzések
✅ A bemeneti tartományoknak rendezettnek kell lenniük → ha nem azok, először std::sort. ✅ Az algoritmus nem tárolja duplikált elemeket → ha egy elem mindkét bemeneti tartományban szerepel, csak egyszer kerül be az eredménybe. ✅ Az eredmény rendezett lesz.
Kapcsolódó algoritmusok
| Algoritmus | Művelet |
|---|---|
std::set_union |
Unió (összes elem egyszer) |
std::set_intersection |
Metszet (csak közös elemek) |
std::set_difference |
Különbség (csak az elsőben lévő elemek) |
std::set_symmetric_difference |
Szimmetrikus különbség (csak az egyikben szereplő elemek) |
Használati minta vector-ral is
A std::set_union nem csak std::set-tel használható, hanem bármilyen rendezett tartománnyal (pl. std::vector):
std::vector<int> v1 = {1, 3, 5, 7};
std::vector<int> v2 = {2, 3, 4, 5, 6};
std::vector<int> result;
std::set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(result));
Összefoglalás
| Tulajdonság | Részlet |
|---|---|
| Algoritmus neve | std::set_union |
| Bemenet | 2 db rendezett tartomány |
| Kimenet | 1 db rendezett tartomány, elemek egyszer |
| Duplikátumok | Csak egyszer kerülnek be |
| Használat | Halmazműveletek, adattisztítás, statisztikai feldolgozás |
| Időkomplexitás | O(n1 + n2) |
- std::set union - Szótár.net (en-hu)
- std::set union - Sztaki (en-hu)
- std::set union - Merriam–Webster
- std::set union - Cambridge
- std::set union - WordNet
- std::set union - Яндекс (en-ru)
- std::set union - Google (en-hu)
- std::set union - Wikidata
- std::set union - Wikipédia (angol)