#include #include #include #include class Set { public: explicit Set(const std::vector& S) { for (auto item : V) { Add(item); } } Set() = default; Set Union(const Set& s) { Set S = s; for (auto item : set) { S.Add(item); } return S; } Set Intersection(const Set& s) const { Set S; for (auto item : set) { if (s.Contains(item)) { S.Add(item); } } return S; } Set Difference(const Set& s) const { Set S; for (auto item : set) { if (!s.Contains(item)) { S.Add(item); } } return S; } Set SymmetricDifference(const Set& s) const { Set S = s; for (auto item : set) { S.Add(item); } for (auto item : set) { if (s.Contains(item)) { S.Remove(item); } } return S; } void Add(int64_t num) { if (!(find(set.begin(), set.end(), num) != set.end())) { set.push_back(num); } UpdateSet(); } std::vector Data() { return set; } void Remove(int64_t num) { set.erase(find(set.begin(), set.end(), num)); } bool Contains(int64_t num) const { if (find(set.begin(), set.end(), num) != set.end()) { return true; } else { return false; } } private: void UpdateSet() { sort(set.begin(), set.end()); } std::vector set; };