我如何比较两个数组?

时间:2016-04-05 15:05:07

标签: c++ arrays function

所以我的问题是我需要比较两个数组。像这样比较它们,如果数组1具有值 - 1 2 3并且数组2具有值3 2 1,则程序将其视为相等。现在我只能使它工作如果数组1值 - 1 2 3和数组2值 - 1 2 3,然后它发现数组相等,但我需要搜索具有相似值但不是在同一个地方激动的数组。 现在我使用下面的代码在数组中搜索相等的值。但如果您需要搜索相同的值但位于不同的位置,它就无法工作。希望大多数人都能理解我的问题。抱歉英语不好,不是我的母语。

 int skaitluParbaude(int loterija[], int speletajs[])
 {
int match = 0;

for (int x = 0; x < SKAITS; ++x)
{
    if (loterija[x] == speletajs[x])
        match = match + 1;

}
return match;
}

4 个答案:

答案 0 :(得分:1)

我能想到两种方式:

  1. 在比较之前对数组进行排序。排序后,您可以比较从索引0开始的元素。如果发现不匹配,则数组不会相等。

  2. 从数组中创建两个std::set并使用std::set::operator==

    std::set<int> s1(std::begin(array1), std::end(array1));
    std::set<int> s2(std::begin(array2), std::end(array2));
    s1 == s2;
    

答案 1 :(得分:0)

如果{1,2,3}{1,2,3}相比,请使用您使用的确切方法。

但是:在开始比较之前对两个数组进行排序。这是诀窍,以下是对数组进行排序的方法:

std::sort(YourArray.begin(), YourArray.end());

答案 2 :(得分:0)

对两个数组进行排序并按以下方式应用您的方法:

int skaitluParbaude(int loterija[], int speletajs[])
 {
int match = 0;

sort(loterija,loterija + x);
sort(speletajs,speletajs + x);


for (int x = 0; x < SKAITS; ++x)
{
    if (loterija[x] == speletajs[x])
        match = match + 1;

}
return match;
}

包括<algorithm>作为头文件。并且x是数组的大小。

答案 3 :(得分:0)

如果您事先知道数组的大小,可以使用散列,将INT_MAX替换为数组的最大元素。

bool similar(int loterija[], int speletajs[]){

    int arr[INT_MAX], flag = 0;
    std::fill(begin(arr),end(arr),0);

    for (int x = 0; x < SKAITS; ++x) 
        arr[loterija[x]] = 1;
    for (int x = 0; x < SKAITS; ++x) 
        if(arr[speletajs[x]] != 1) {
             flag = 1;
             break;
        }
    if(flag == 0)
        return true;
    else 
        return false;
}