问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++中如何表示集合,并且怎么进行集合的运算

发布网友 发布时间:2022-04-30 20:15

我来回答

2个回答

热心网友 时间:2022-07-01 00:09

你可以使用并查集,你可以查一下怎么使用,如果了解STL,你可以使用stl中的set。而且STL提供了标准的集合的算法, set_difference,set_union,set_intersect进行并集,交集,抑或等运算。如果上述不会,你可以使用简单的链表实现。比如第一个链表代表集合A,链表2代表集合B。。。。当插入元素的时候在指导的链表中插入即可,进行运算的时候就需要二阶循环,将链表A中的元素与B中的每一个元素都进行比较,满足条件的插入到结果链表中,最后返回结果链表即可。

热心网友 时间:2022-07-01 00:09

#include <iostream>
#include <string>

using namespace std;

template <typename Type>
class MySet
{
public:
MySet();
MySet(int s, const Type a[]);
MySet(const MySet<Type> &o);

void Empty();
bool IsEmpty() const;
bool IsMemberOf(const Type &m) const;
void Add(const Type &m);
Type Sub();
bool IsEqual(const MySet<Type> &o) const;
MySet<Type> operator&(const MySet<Type> &o);
MySet<Type> operator|(const MySet<Type> &o);
void Print();

private:
Type element[100];
int count;
};

template <typename Type>
MySet<Type>::MySet() : count(0)
{
}

template <typename Type>
MySet<Type>::MySet(int s, const Type a[]) : count(s)
{
for (int i = 0; i < s; ++i)
element[i] = a[i];
}

template <typename Type>
MySet<Type>::MySet(const MySet &o)
{
count = o.count;

for (int i = 0; i < count; ++i)
element[i] = o.element[i];
}

template <typename Type>
void MySet<Type>::Empty()
{
count = 0;
}

template <typename Type>
bool MySet<Type>::IsEmpty() const
{
return (count == 0);
}

template <typename Type>
bool MySet<Type>::IsEqual(const MySet<Type> &o) const
{
if ((count != o.count)
|| (IsEmpty() && !o.IsEmpty())
|| (!IsEmpty() && o.IsEmpty()))
return false;

for (int i = 0; i < count; ++i)
{
if (element[i] != o.element[i])
return false;
}

return true;
}

template <typename Type>
bool MySet<Type>::IsMemberOf(const Type &m) const
{
if (IsEmpty())
return false;

for (int i = 0; i < count; ++i)
{
if (element[i] == m)
return true;
}

return false;
}

template <typename Type>
void MySet<Type>::Add(const Type &m)
{
if (++count > 100)
return;

element[count - 1] = m;
}

template <typename Type>
Type MySet<Type>::Sub()
{
if (IsEmpty())
return 0;

Type temp = element[count];
--count;

return temp;
}

template <typename Type>
MySet<Type> MySet<Type>::operator&(const MySet<Type> &o)
{
MySet<Type> inset;

if (IsEmpty() || o.IsEmpty())
return inset;

for (int i = 0; i < count; ++i)
{
for (int j = 0; j < o.count; ++j)
if (element[i] == o.element[j] && !inset.IsMemberOf(o.element[j]))
inset.Add(element[i]);
}

return inset;
}

template <typename Type>
MySet<Type> MySet<Type>::operator|(const MySet<Type> &o)
{
MySet<Type> unset(count, element);

if (!IsEmpty() && o.IsEmpty())
return unset;

if (IsEmpty() && !o.IsEmpty())
return MySet(o);

for (int i = 0; i < count; ++i)
{
for (int j = 0; j < o.count; ++j)
if (element[i] != o.element[j] && !unset.IsMemberOf(o.element[j]))
unset.Add(o.element[j]);
}

return unset;
}

template <typename Type>
void MySet<Type>::Print()
{
for (int i = 0; i < count; ++i)
cout << element[i] << ' ';
cout << endl;
}

int main()
{
int ia[7] = { 1, 2, 3, 4, 5, 6, 7 };
MySet<int> a, b(7, ia);
a.Add(6);
a.Add(7);
a.Add(8);
a.Add(9);
a.Print();
b.Print();
MySet<int> c = a | b;
MySet<int> d = a & b;
c.Print();
d.Print();
MySet<string> str;
str.Add("Hello");
str.Add("World!");
str.Print();
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 excel怎么对多个工作表内容统计 俄罗斯蓝猫和拉布拉多可以一起养吗? 家里有一只蓝猫,想问第一次养狗适合养什么狗? 如何设置word自动保存 c++ 请帮忙 请问在java中如何表示集合? 一个小程序可以跳转多少个小程序 java语言,list集合中套list集合,list&lt;list&lt;A&gt;&gt;,而A类是B类的父类,怎样取得B类中private的元素 模拟人生2 人物、房屋等自加修改模型合集 求private公司电影合集,有的兄弟麻烦发一下 记得看过一部,很多人去一个岛上,都没穿衣服,有 什么是集合的闭包? 谁知道private系列影片的下载地址啊? private中的极品,我们知道的《中国魔盒》、金字塔 这两个片子你有吗 南京乡村旅游消费券在哪里用最实惠??? 南京市民如何申请南京市政府派发的旅游券? 油皮能用婷美美肌玻色因肽舒纹修护冻干粉吗? 南京乡村旅游消费券在哪里用实惠? 您好,你们公司是不是又开发了一个有钱花软件,需要开通会员才能提现? thinkpad x1 carbon 远程桌面无法使用 我想与外省的办事处进行远程连接,来控制其电脑 图标变成了PDF的图标,双击图标后出现‘adobe Reader’无法打开,因为不支持此文件类型或_百度问一问 我想养一只猫一只狗,猫是俄罗斯蓝猫听说比较温柔,狗想养拉布拉多或者查理斯王小猎犬,是两只从小一起养 Excel多个工作簿中数据的数量统计 问:泰迪能跟蓝猫一起养吗 泰迪能跟蓝猫一起养吗?现在有只泰迪,刚一年,刚买了一只蓝猫,才一个月,两个能一起养吗?我家泰迪比较 一个手机两个,玩小程序打开都是一样的,我要各玩各的怎么弄? adobe reader 为什么用不了 狗和猫可以一起养吗?哪种猫攻击性弱一点?短毛的最好,能和狗狗和平相处的。 蓝猫和柴犬哪一个适合新手女生养? 怎么将表格固定只能改两列 adobe reader 10 无法启动了,重装也没用,怎么办。 excel中怎么统计每个工作表中的数据 养了两只蓝猫(一公一母),蓝猫怎么养??吃什么??可以和狗狗养一起吗??发情了怎么办??可以和人睡 桌面图标全都变成Adobe Reader文件打不开,怎么回事? adobe reader无法打开exe文件 安装adobe reader时,提示部分文件被占用,进程无法运行,求大神,如果能解决,安装后再给20财富币 比熊犬和蓝猫哪个贵? 华为P20 未备份的照片,不小心删除了,最近删除里面也清空了,怎么恢复? 华为p20手机不小心误删的一个手机文件有什么办法恢复? 中级会计职称可以补报名吗?