C++ C++;检查2个数组中的相同值
我有两个数组,分别是C++ C++;检查2个数组中的相同值,c++,arrays,for-loop,C++,Arrays,For Loop,我有两个数组,分别是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,但我不能使它的工作预期 您可以使用两个for循环来完成: int MAX=4; //number of ele
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,但我不能使它的工作预期 您可以使用两个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)
}
}
}
int MAX=4//数组中的元素数
对于(int i=0;i
printf
的输出为:
两个数组中的第0个值相同,为:1
两个数组中的第1个值相同,为:1
两个数组中的第三个值相同,为:4
您可以使用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;
}
bool-unique(std::vector&x,std::vector&y)
{
std::set可见;
对于(int i=0,n=x.size();如果您只有一个coords数组,可能建模为std::pair
,那么iIt将更容易实现。一般来说,这是一种非常糟糕的方法,因为它是O(n²).S/他试图解决一个不同的问题;给定一个2d点列表,他/他想知道所有点是否不同。示例中的问题不是该点是(1,1)
(即x==y
),而是该点在列表中存储了两次。
int xVal[4] = {1,1,3,4};
int yVal[4] = {1,1,5,4};
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;
}