C++正在检查2个数组中的相同值
C++ Checking for identical values in 2 arrays
我有两个数组,分别称为xVal
和yVal
。
我使用这些数组作为坐标。我想做的是确保数组不包含两组相同的坐标。
假设我的数组看起来像这样:
int xVal[4] = {1,1,3,4};
int yVal[4] = {1,1,5,4};
在这里,我想找到xVal[0]
yVal[0]
和xVal[1]
yVal[1]
之间的匹配,作为两个相同的坐标集,称为1,1。
我用forLoop尝试了一些不同的东西,但我无法使它按预期工作。
您可以使用O(n^2(方法编写显式循环(请参阅x77aBs的答案(,也可以用一些内存换取性能。例如使用std::set
bool unique(std::vector<int>& x, std::vector<int>& y)
{
std::set< std::pair<int, int> > seen;
for (int i=0,n=x.size(); i<n; i++)
{
if (seen.insert(std::make_pair(x[i], y[i])).second == false)
return false;
}
return true;
}
您可以使用两个for循环来完成:
int MAX=4; //number of elements in array
for (int i=0; i<MAX; i++)
{
for (int j=i+1; j<MAX; j++)
{
if (xVal[i]==xVal[j] && yVal[i]==yVal[j])
{
//DUPLICATE ELEMENT at xVal[j], yVal[j]. Here you implement what
//you want (maybe just set them to -1, or delete them and move everything
//one position back)
}
}
}
小解释:我得到的第一个变量值为0。然后在所有可能的数字上循环j。这样就可以将xVal[0]和yVal[0]与所有其他值进行比较。j从i+1开始,因为在i之前不需要比较值(它们已经被比较过了(。
编辑-您应该考虑编写一个小类来表示一个点,或者至少表示一个结构,并使用std::vector而不是数组(更容易删除中间的元素(。这应该会让你的生活更轻松:(
int identicalValueNum = 0;
int identicalIndices[4]; // 4 is the max. possible number of identical values
for (int i = 0; i < 4; i++)
{
if (xVal[i] == yVal[i])
{
identicalIndices[identicalValueNum++] = i;
}
}
for (int i = 0; i < identicalValueNum; i++)
{
printf(
"The %ith value in both arrays is the same and is: %i.n",
identicalIndices[i], xVal[i]);
}
对于
int xVal[4] = {1,1,3,4};
int yVal[4] = {1,1,5,4};
printf
的输出为:
两个数组中的第0个值相同,为:1。
两个数组中的第1个值相同,为:1。
两个数组中的第3个值相同,为:4。
相关文章:
- 试图让变量检查数组中的某些内容
- 如何在C++中检查2D数组中负值的输入验证
- 使用for循环检查数组中的重复项
- 检查TCHAR数组输入是否为带符号整数C++
- std::数组边界检查如何工作?
- 检查输入 std::array 指针数据是否等于某个常量数组
- 给定一个大小为 N 的数组 S,检查是否可以将序列拆分为两个序列
- C++ 检查结果数组中有多少次数字
- 检查数组中是否有字符串中的值,如果没有,则添加它
- 有没有办法在c ++中清除空数组,请检查下面的代码以获取说明
- 如何检查一个字符是否与字符数组中的另一个字符匹配?
- 如何检查二维数组上的周围数字?
- 检查反向数组是否与原始数组相同
- 如何检查cin是否与数组中的一组数字匹配
- 如何检查数组中是否没有值
- 如何检查字节数组是protobuf序列化字节数组还是普通字节数组
- 检查彩虹数组(检查数组的反向样式是否与自身匹配)
- 使用数组检查连续性
- c++ 根据随机生成的数组检查用户输入的值
- 使用字符串数组检查用户输入