gpt4 book ai didi

C++使用数组设置交集和并集

转载 作者:行者123 更新时间:2023-11-28 02:52:37 27 4
gpt4 key购买 nike

我必须从数据文件中找到集合并集的基数和两个集合的集合交集。我创建了两个数组(setA[] 和 setB[])来存储我的数据。 a 和 b 分别是集合 A 和集合 B 中的元素数。 setIntersection 应该保存集合 A 和 B 之间的交集结果。但我被困在如何找到并集和交集的问题上。

int printIntersection(int setA[], int setB[], int setIntersection[], int a, int b, int k) 
{
int i = 0;
int j = 0;

while(i < a && j < b)
{
if(setA[i] < setB[j])
{
i++;
}

else if(setA[i] > setB[j])
{
j++;
}

else if (setA[i] == setB[j])
{
setIntersection[k] = setA[i];
i++;
j++;
k++;
}
cout<<"Cardinality of intersection is "<<k<<endl;
}

此代码用于交集,但我什么也没得到。而且我不知道从哪里开始 union 。任何人都可以帮我解决代码谢谢!P.S 我只被允许使用数组和简单的代码算法。提前致谢!

最佳答案

使用std::set_unionstd::set_intersection ,例如

int *c = std::set_union(setA, setA + a, setB, setB + b, setC)
int *c = std::set_intersection(setA, setA + a, setB, setB + b, setC)

其中 setC 是一个足够大小的输出数组; c 指向构造范围的最后一个元素之后的一个。

如果你想要基数,c - setC 就是你的答案。

我建议使用类似 std::vector 的东西来表示,并在算法调用中使用迭代器而不是数组/指针/长度。

假定输入范围已排序;输出也是如此。

如果您想自己做,您会在上面的链接中找到“可能的实现”。

关于C++使用数组设置交集和并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22700238/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com