英语不是我的母语:抱歉我的错误。提前感谢您的回答。
我正在学习C ++,而我正在尝试检查具有相同整数数的两个集合的程度 - 以任何顺序 - 都是双射的。
示例:
int ArrayA [4] = { 0, 0, 3, 4 };
int ArrayB [4] = { 4, 0, 0, 3 };
ArrayA和ArrayB是双射的。
我的实施很幼稚。
int i, x=0;
std::sort(std::begin(ArrayA), std::end(ArrayA));
std::sort(std::begin(ArrayB), std::end(ArrayB));
for (i=0; i<4; i++) if (ArrayA[i]!=ArrayB[i]) x++;
如果x == 0,那么这两组是双射的。容易。
我的问题如下:我想计算集合之间的双向数,而不仅仅是ArrayA和ArrayB之间关系的整个属性。
示例:
int ArrayA [4] = { 0, 0, 0, 1 }
int ArrayB [4] = { 3, 1, 3, 0 }
这些集合是双向的吗?不。但是有2个双射(0和0,1和1)。
使用我的代码,输出将是1个双射。实际上,如果我们对数组进行排序,我们得到:
ArrayA = 0,0,0,1; ArrayB = 0,1,3,3。
并排比较只显示0到0之间的双射。
然后,我的问题是: 你知道一种在两个大小相同的集合之间映射元素的方法,并计算两次整数的顺序吗?
Ivaylo Strandjev的回答是:
答案 0 :(得分:2)
您需要计算两个集合中包含的元素数量。这称为集交集,它可以使用标准函数 - set_intersection来完成,这是标头算法的一部分。请记住,您仍然需要先对两个数组进行排序。