#pragma once #include #include class Set { private: std::vector set; public: explicit Set(const std::vector &s = {}) : set(s) { } void Add(int64_t num) { if (!(std::find(set.begin(), set.end(), num) != set.end())) { set.push_back(num); sort(set.begin(), set.end()); } } void Remove(int64_t num) { auto it = std::find(set.begin(), set.end(), num); if (it != set.end()) set.erase(it); } bool Contains(int64_t num) const { return std::find(set.begin(), set.end(), num) != set.end(); } Set Union(const Set &s) const { Set setter; for (int64_t k : set) setter.Add(k); for (int64_t k : s.set) setter.Add(k); return setter; } Set SymmetricDifference(const Set &s) const { Set setter; for (int64_t k : s.set) { if (!(std::find(set.begin(), set.end(), k) != set.end())) { setter.Add(k); } } for (int64_t k : set) { if (!(std::find(s.set.begin(), s.set.end(), k) != s.set.end())) { setter.Add(k); } } return setter; } Set Difference(const Set &s) const { Set setter; for (int64_t k : set) { if (!(std::find(s.set.begin(), s.set.end(), k) != s.set.end())) { setter.Add(k); } } return setter; } Set Intersection(const Set &s) const { Set setter; for (int64_t k : s.set) { if ((std::find(set.begin(), set.end(), k) != set.end())) { setter.Add(k); } } return setter; } std::vector Data() const { return set; } };