我找到了set union的基数,并从数据文件中设置了两组的交集。我创建了两个数组(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;
}
此代码用于交叉,但我没有得到任何东西。而且我不知道从哪里开始工会。任何人都可以帮我解决代码谢谢! P.S我只允许使用数组和简单的代码算法。提前谢谢!
答案 0 :(得分:2)
使用std::set_union和std::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
的表示形式,并在算法调用中使用迭代器而不是数组/指针/长度。
假设输入范围已排序;输出也是如此。
如果您想自己动手,您可以在上面的链接中找到“可能的实现”。