Ugrás a tartalomhoz

std::set union

A Wikiszótárból, a nyitott szótárból


Főnév

std::set union (tsz. std::set unions)

  1. (informatika) A std::set_union a 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ában std::back_inserter vagy std::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)