C/C++

Программирование на С++(Классы-объекты)

Описать класс «множество», позволяющий выполнять основные операции — до¬бавление и удаление элемента, пересечение, объединение и разность множеств.
Написать программу, демонстрирующую работу с этим классом. Программа долж¬на содержать меню, позволяющее осуществить проверку всех методов класса.
#include <algorithm>
#include <iostream>
#include <set>
#include <iterator>
template<typename Type>
struct Set : public std::multiset<Type> {
Set() = default;
Set(const std::multiset<Type>& box) : std::multiset<Type>(box) {}
Set(const std::initializer_list<Type> box) : std::multiset<Type>(box) {}
// Вывод содержимого контейнера в консоль
void show()const {
for (auto x : *this) std::cout << x << ' ';
puts("");
}
// Нахождение пересечения
Set<Type> set_intersection(const Set<Type>& box) {
Set<Type> acc;
std::set_intersection(begin(), end(), box.begin(), box.end(), std::inserter(acc, acc.end()));
return acc;
}
// Нахождение объединения
Set<Type> set_union(const Set<Type>& box) {
Set<Type> acc;
std::set_union(begin(), end(), box.begin(), box.end(), std::inserter(acc, acc.end()));
return acc;
}
// Нахождение разности
Set<Type> set_difference(const Set<Type>& box) {
Set<Type> acc;
std::set_difference(begin(), end(), box.begin(), box.end(), std::inserter(acc, acc.end()));
return acc;
}
auto begin()const {
return std::multiset<Type>::begin();
}
auto end()const {
return std::multiset<Type>::end();
}
};
int main() {
system("chcp 1251 > nul");

puts("Создание первого множества:");
Set<int> box{ 1, 2, 2, 4, 5, 10, 10 };
box.show();

puts("Удаление из множества первой двойки:");
auto two = 2;
auto pos = box.find(two);
if (pos != box.end()) box.erase(pos);
box.show();

puts("Вставка тройки:");
box.insert(3);
box.show();

puts("Удаление всех десяток:");
auto ten = 10;
if (box.contains(ten)) box.erase(ten);
box.show();

puts("Создание второго множества:");
Set<int> fox{ 3, 4, 5, 6, 7, 8 };
box.show();

puts("Нахождение пересечения:");
auto res_intersection = box.set_intersection(fox);
if (!res_intersection.empty()) res_intersection.show();
else puts("Пересечение не найдено!");

puts("Нахождение объединения:");
auto res_union = box.set_union(fox);
if (!res_union.empty()) res_union.show();
else puts("Объединение не найдено!");

puts("Нахождение разности:");
auto res_difference = box.set_difference(fox);
if (!res_difference.empty()) res_difference.show();
else puts("Разность не найдена!");

system("pause > nul");
}

Документация: https://docs.microsoft.com/ru-ru/cpp/standard-library/multiset-class?view=msvc-160

P.S. Меню напишите самостоятельно :)
ВЛ
Владимир Лукас
52 223
Лучший ответ
Там уже есть класс unordered_set, покури мануал. Просто напиши наследника и добавь недостающие методы.
Яков Воловик
Яков Воловик
51 187