Операции над множествами
1. Объединение множеств
Для объединения множеств можно использовать, например, одну из форм операции вставки (insert).
Пример:
#include <iostream>
#include <set>
using namespace std;
set <int> a;
set <int> b;
set <int> c;
int main()
{
a.insert(1);
a.insert(2);
// сформировали первое множество из чисел (1, 2)
cout << a.size() << endl;
// будет выведено 2, так как в первом множестве 2 элемента
b.insert(2);
b.insert(3);
// сформировали второе множество из чисел (2, 3)
cout << b.size() << endl;
// будет выведено 2, так как во втором множестве 2 элемента
c.insert(a.begin(), a.end());
c.insert(b.begin(), b.end());
// последовательно добавили в результат элементы обоих множеств
cout << c.size() << endl;
// будет выведено 3, так как в первом множестве 3 элемента
// число 2 повторяется в первом и втором множестве, поэтому
// в ответ попадет 1 раз
return 0;
}
Еще один вариант - использование функции set_union().
Пример:
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
vector <int> v1;
vector <int> v2;
vector <int> v_intersection;
set <int> s;
int main()
{
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v2.push_back(2);
v2.push_back(3);
v2.push_back(4);
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
set_union(v1.begin(), v1.end(),
v2.begin(), v2.end(),
back_inserter(v_intersection));
s.insert(v_intersection.begin(), v_intersection.end());
cout << s.size();
}
2. Пересечение множеств
Функция set_intersection() работает с объектами типа vector. Поэтому пересечение будет выглядеть чуть более громоздким, чем объединение.
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
vector <int> v1;
vector <int> v2;
vector <int> v_intersection;
set <int> s;
int main()
{
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v2.push_back(2);
v2.push_back(3);
v2.push_back(4);
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
back_inserter(v_intersection));
s.insert(v_intersection.begin(), v_intersection.end());
cout << s.size();
// будет выведено число 2
}
3. Разность
Функция set_difference() работает аналогично set_intersection()
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
vector <int> v1;
vector <int> v2;
vector <int> v_intersection;
set <int> s;
int main()
{
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
v2.push_back(2);
v2.push_back(3);
v2.push_back(4);
sort(v1.begin(), v1.end());
sort(v2.begin(), v2.end());
set_intersection(v1.begin(), v1.end(),
v2.begin(), v2.end(),
back_inserter(v_intersection));
s.insert(v_intersection.begin(), v_intersection.end());
cout << s.size();
// будет выведено число 1
}
Последнее изменение: Суббота, 15 Август 2020, 02:34