C++ 整数的双射映射
英语不是我的母语:对不起我的错误。提前感谢您的回答 <>我学习C++,我要检查两个整数相同的集合(无论顺序是什么),在何种程度上是双射的。 例如:C++ 整数的双射映射,c++,bijection,C++,Bijection,英语不是我的母语:对不起我的错误。提前感谢您的回答 我学习C++,我要检查两个整数相同的集合(无论顺序是什么),在何种程度上是双射的。 例如: int ArrayA [4] = { 0, 0, 3, 4 }; int ArrayB [4] = { 4, 0, 0, 3 }; int ArrayA [4] = { 0, 0, 0, 1 } int ArrayB [4] = { 3, 1, 3, 0 } ArrayA和ArrayB是双射的 我的实现很幼稚 int i, x=0; std:
int ArrayA [4] = { 0, 0, 3, 4 };
int ArrayB [4] = { 4, 0, 0, 3 };
int ArrayA [4] = { 0, 0, 0, 1 }
int ArrayB [4] = { 3, 1, 3, 0 }
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++;
集合作为一个整体是双射的吗?没有。但是有两个双射(0和0,1和1)
在我的代码中,输出将是1个双射。实际上,如果我们对数组进行排序,我们会得到:
ArrayA=0,0,0,1;
ArrayB=0,1,3,3
并列比较仅显示0和0之间的双射
那么,我的问题是:
你知道在两个大小相等的集合之间映射元素并计算双射数的方法吗,不管整数的顺序如何
解决了的!
Ivaylo Strandjev给出的答案是:
您需要计算两个集合中包含的元素数。这被称为集合交集,它可以通过一个标准函数完成,这是标题算法的一部分。请记住,您仍然需要首先对这两个数组进行排序 沿着
inti=0,j=0,count=0这条线做点什么怎么样;虽然(iFantastic!这似乎是解决方案。比我的建议优雅得多。=]经过一些测试后:这就是解决方案。谢谢Ivaylo!@GuillaumeLethuillier如果你确信这是解决方案,你应该将答案标记为已被接受。@BartvanNierop:它可能看起来很优雅,但实际上在构建交叉点时要慢得多而您的解决方案(在注释中)避免了这一点。您提供的算法实际上是标准算法,可能在set\u intersection
中使用。