#include <iostream>
#include <set>
#include <algorithm>
void printSet(const std::set<int>& s, const std::string& name) {
std::cout << name << ": ";
for (int num : s) {
std::cout << num << " ";
}
std::cout << std::endl;
}
int main() {
std::set<int> set1 = {1, 2, 3, 4, 5};
std::set<int> set2 = {4, 5, 6, 7, 8};
printSet(set1, "Set 1");
printSet(set2, "Set 2");
// Union
std::set<int> unionSet;
std::set_union(set1.begin(), set1.end(), set2.begin(), set2.end(),
std::inserter(unionSet, unionSet.begin()));
printSet(unionSet, "Union");
// Intersection
std::set<int> intersectionSet;
std::set_intersection(set1.begin(), set1.end(), set2.begin(), set2.end(),
std::inserter(intersectionSet, intersectionSet.begin()));
printSet(intersectionSet, "Intersection");
// Difference (set1 - set2)
std::set<int> differenceSet;
std::set_difference(set1.begin(), set1.end(), set2.begin(), set2.end(),
std::inserter(differenceSet, differenceSet.begin()));
printSet(differenceSet, "Difference (set1 - set2)");
// Symmetric Difference
std::set<int> symDifferenceSet;
std::set_symmetric_difference(set1.begin(), set1.end(), set2.begin(), set2.end(),
std::inserter(symDifferenceSet, symDifferenceSet.begin()));
printSet(symDifferenceSet, "Symmetric Difference");
return 0;
}