#include #include #include class Set { public: Set() = default; explicit Set(const std::vector &elements) { for (const auto &element : elements) { if (!this->Contains(element)) { this->Add(element); } } } void Add(int64_t new_element) { if (!this->Contains(new_element)) { elements.push_back(new_element); sort(elements.begin(), elements.end()); } } void Remove(int64_t old_element) { auto it = std::find(elements.begin(), elements.end(), old_element); elements.erase(it); } bool Contains(int64_t element) const { for (const auto &item : elements) { if (item == element) { return true; } } return false; } Set Union(const Set &second_set) const { Set result_set = second_set; for (const auto &item : elements) { result_set.Add(item); } return result_set; } Set Intersection(const Set &second_set) const { Set result_set; for (auto item : elements) { if (second_set.Contains(item)) { result_set.Add(item); } } return result_set; } Set Difference(const Set &second_set) const { Set result_set; for (auto item : elements) { if (!second_set.Contains(item)) { result_set.Add(item); } } return result_set; } Set SymmetricDifference(const Set &second_set) const { Set result_set = second_set; result_set = this->Union(second_set); result_set = result_set.Difference(this->Intersection(second_set)); return result_set; } std::vector Data() { return elements; } private: std::vector elements; };