如何比较两个数组

How can i compare two arrays?

本文关键字:数组 两个 比较 何比较      更新时间:2023-10-16

所以我的问题是需要比较两个数组。这样比较它们,如果数组1的值为-1 2 3,数组2的值为3 2 1,则程序会发现它是相等的。现在,我只让它在数组1值为1 2 3和数组2值为1 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;
}

我可以想到两种方法:

  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,2,3}而不是{1,2,3},请使用您正在使用的确切方法。

但是:在开始比较之前对两个数组进行排序。这就是诀窍,下面是如何对数组进行排序:

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

对这两个数组进行排序并应用您的方法,如下所示:

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;
}

为此包括CCD_ 5作为头文件。CCD_ 6是阵列的大小。

如果事先知道数组的大小,则可以使用哈希,将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;
}