Операции над множествами

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