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:

英语不是我的母语:对不起我的错误。提前感谢您的回答

<>我学习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::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
    中使用。