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;
}