代码之家  ›  专栏  ›  技术社区  ›  Desolator

比较C++中两个数组的2个元素

  •  4
  • Desolator  · 技术社区  · 15 年前

    我有两个数组,每个数组都有一些值,例如:

    int a[] =  {1, 2, 3, 4};
    int b[] =  {0, 1, 5, 6};
    

    现在我需要比较数组(a)中的元素和数组(b)中的元素。。 如果有任何匹配的程序应该返回一个错误或打印“错误有一个重复的值”等。。 在上述情况下,它应该返回一个错误coz a[0]=b[1],因为两者的值相同。

    4 回复  |  直到 11 年前
        1
  •  7
  •   Reed Copsey    15 年前

    如果数组这么小,我就用蛮力方法,在两个数组中循环:

    for (int i=0;i<4;++i)
    {
        for (int j=0;j<4;++j)
        {
            if (a[i] == b[j])
            {
                // Return an error, or print "error there is a duplicate value" etc
            }
        }
    }
    

    例如,如果对一个数组进行了排序,则可以更快地检查匹配项,特别是当数组的长度变大时。不过,如果数组的长度总是只有几个元素的话,我就不需要做任何更详细的事情了。

        2
  •  3
  •   Brendan Long    15 年前

    // int array1[FIRSTSIZE];
    // int array2[SECONDSIZE];
    for(int i=0, j=0; i < FIRSTSIZE && j < SECONDSIZE; ){
        if(array1[i] == array2[j]){
            cout << "DUPLICATE AT POSITION " << i << "," << j << endl;
            i++;
            j++;
        }
        else if(array1[i] < array2[j]){
            i++;
        }
        else{
            j++;
        }
    }
    

    这应该具有线性复杂度,但它只有在对它们进行排序时才起作用。

        3
  •  2
  •   Philipp    15 年前

    已发布排序数组的解决方案。如果数组没有排序,您可以构建一个集合(例如。 std::set 或者一个散列集)并查看这些集是否不相交。您可能需要在集合中存储valueindex对,以找出哪个索引是重复的(并适当地重载比较运算符)。这可能会给你( n 日志 n

        4
  •  0
  •   asad_IT    9 年前
    //v={1,2,3,4};  vector
    //v1={1,2,3,4}  vector
    
      bool f=0;
        if(equal(v.begin(),v.end(),v1.begin()))  //compare two vector, if equal return true
        {
            f=1;
        }
    
        }
        if(f==1)
            cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    
            enter code here