英语不是我的母语:对不起我的错误。预先感谢您的回答。
我正在学习 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 个双射。事实上,如果我们对数组进行排序,我们会得到:
数组A = 0, 0, 0, 1; 数组 B = 0、1、3、3。
并排比较仅显示 0 和 0 之间的双射。
然后,我的问题是: 您是否知道一种在两个大小相等的集合之间映射元素并计算双射数的方法,无论整数的顺序如何?
解决了!
Ivaylo Strandjev 给出的答案有效:
- 对集合进行排序,
- 使用std::set_intersection函数,
- 利润。