所以我的问题是我需要比较两个数组。像这样比较它们,如果数组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;
}
答案 0 :(得分:1)
我能想到两种方式:
在比较之前对数组进行排序。排序后,您可以比较从索引0开始的元素。如果发现不匹配,则数组不会相等。
从数组中创建两个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;
}