#include
#include
#include
class CharSet {
private:
std::set elements;
public:
// Добавление элемента в множество
void operator+(char elem) {
elements.insert(elem);
}
// Удаление элемента из множества
void operator-(char elem) {
elements.erase(elem);
}
// Проверка на принадлежность элемента множеству
bool operator>(char elem) const {
return elements.find(elem) != elements.end();
}
// Сравнение на равенство
bool operator==(const CharSet& other) const {
return elements == other.elements;
}
// Сравнение на неравенство
bool operator!=(const CharSet& other) const {
return elements != other.elements;
}
// Получение множества из элементов, встречающихся либо в одном, либо в другом множестве, но не встречающихся в обоих
CharSet operator^(const CharSet& other) const {
CharSet result;
std::set_symmetric_difference(elements.begin(), elements.end(),
other.elements.begin(), other.elements.end(),
std::inserter(result.elements, result.elements.begin()));
return result;
}
// Проверка, что множество пустое
bool operator!() const {
return elements.empty();
}
// Проверка, что множества не имеют общих элементов
bool isDisjoint(const CharSet& other) const {
for (const auto& elem : elements) {
if (other.elements.find(elem) != other.elements.end()) {
return false;
}
}
return true;
}
// Печать множества
void print() const {
std::cout << "{ ";
for (const auto& elem : elements) {
std::cout << elem << " ";
}
std::cout << "}" << std::endl;
}
};
int main() {
CharSet set1, set2;
set1 + 'a';
set1 + 'b';
set1 + 'c';
set2 + 'b';
set2 + 'c';
set2 + 'd';
std::cout << "Set 1: ";
set1.print();
std::cout << "Set 2: ";
set2.print();
std::cout << "Set 1 contains 'a': " << (set1 > 'a') << std::endl;
std::cout << "Set 1 contains 'd': " << (set1 > 'd') << std::endl;
std::cout << "Set 1 == Set 2: " << (set1 == set2) << std::endl;
std::cout << "Set 1 != Set 2: " << (set1 != set2) << std::endl;
CharSet symDiff = set1 ^ set2;
std::cout << "Symmetric difference of Set 1 and Set 2: ";
symDiff.print();
std::cout << "Set 1 and Set 2 have no common elements: " << set1.isDisjoint(set2) << std::endl;
return 0;
}
#include
#include
#include
class CharSet {
private:
std::set elements;
public:
// Добавление элемента
CharSet& operator+(char elem) {
elements.insert(elem);
return *this;
}
// Удаление элемента
CharSet& operator-(char elem) {
elements.erase(elem);
return *this;
}
// Проверка на принадлежность элемента множеству
bool operator>(char elem) const {
return elements.find(elem) != elements.end();
}
// Сравнение на равенство
bool operator==(const CharSet& other) const {
return elements == other.elements;
}
// Сравнение на неравенство
bool operator!=(const CharSet& other) const {
return !(*this == other);
}
// Симметрическая разность множеств
CharSet operator^(const CharSet& other) const {
CharSet result;
std::set_symmetric_difference(elements.begin(), elements.end(), other.elements.begin(), other.elements.end(),
std::inserter(result.elements, result.elements.begin()));
return result;
}
// Проверка, что множества не имеют общих элементов (пересечение пустое)
bool operator*(const CharSet& other) const {
for (const auto& elem : elements) {
if (other > elem) {
return true;
}
}
return false;
}
// Вывод множества
friend std::ostream& operator<<(std::ostream& os, const CharSet& set) {
os << "{ ";
for (const auto& elem : set.elements) {
os << elem << " ";
}
os << "}";
return os;
}
};
int main() {
CharSet set1, set2;
set1 + 'a' + 'b' + 'c';
set2 + 'b' + 'c' + 'd';
std::cout << "Set 1: " << set1 << std::endl;
std::cout << "Set 2: " << set2 << std::endl;
set1 - 'a';
std::cout << "Set 1 after removing 'a': " << set1 << std::endl;
std::cout << "'d' in Set 1: " << (set1 > 'd') << std::endl;
std::cout << "'b' in Set 1: " << (set1 > 'b') << std::endl;
std::cout << "Set 1 == Set 2: " << (set1 == set2) << std::endl;
std::cout << "Set 1 != Set 2: " << (set1 != set2) << std::endl;
CharSet symDiff = set1 ^ set2;
std::cout << "Symmetric difference (Set 1 ^ Set 2): " << symDiff << std::endl;
std::cout << "Set 1 and Set 2 have no common elements: " << (! (set1 * set2)) << std::endl;
return 0;
}
Результат выполнения программы