英语不是我的母语:对不起我的错误。预先感谢您的回答。
我正在学习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给出的答案是:
最佳答案
您需要计算两个集合中包含的元素数量。这称为集合交集,可以使用 header 算法的一部分标准函数set_intersection来完成。请记住,您仍然需要先对两个数组进行排序。
关于c++ - 整数的双射映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25645829/