如何比较两个数组
How can i compare two arrays?
所以我的问题是需要比较两个数组。这样比较它们,如果数组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;
}
我可以想到两种方法:
-
在比较之前对数组进行排序。排序后,可以比较从索引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,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;
}
相关文章:
- 如何在C++中比较两个char数组
- 在c++中获取两个大int,并将它们存储在数组中
- 如何以优化的方式同时迭代两个间距不相等的数组
- 运算符重载 (+),用于添加两个具有 C++ 的数组
- 将字符串拆分为标记,并将标记拆分为两个单独的数组
- 可以将两个相同类型的连续数组视为一个数组吗?
- C++递归来决定数组中的两个值
- 如何将字符串和整数读取到两个单独的动态数组中的程序编写?
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- 在 char* 数组中添加两个索引
- 使用嵌套函数数组是个好主意吗?
- 链表数组(5 个队列)
- 是否有可能通过溢出 C 中的第一个元素来写入数组第二个元素
- 动态分配一维结构数组:两种方法
- 指向数组第一个元素的指针的地址
- 用 std::valarray 替换 POD C 样式数组是个坏主意吗?
- OpenGL:两个顶点数组 + 两个索引数组
- c++多维数组多个数据类型
- 使用C++AMP处理大型数组(65536+个元素)
- 在c++中使用MKL函数初始化数组是个好主意吗?