我有两个名为xVal
和yVal
的数组。
我正在使用这些数组作为坐标。我想要做的是确保数组不包含2组相同的坐标。
让我们说我的阵列看起来像这样:
int xVal[4] = {1,1,3,4};
int yVal[4] = {1,1,5,4};
在这里,我想找到xVal[0]
yVal[0]
和xVal[1]
yVal[1]
之间的匹配,将2个相同的坐标集称为1,1。
我用forLoop尝试了一些不同的东西,但我不能让它按预期工作。
答案 0 :(得分:2)
您可以使用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;
}
答案 1 :(得分:0)
你可以用两个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代替数组(更容易删除中间的元素)。这应该会让你的生活更轻松:)
答案 2 :(得分:0)
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。