【问题标题】:C++ Checking for identical values in 2 arraysC ++检查2个数组中的相同值
【发布时间】:2011-09-18 16:34:42
【问题描述】:

我有 2 个数组,分别称为 xValyVal

我将这些数组用作坐标。我想要做的是确保数组不包含 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 尝试了一些不同的东西,但我无法让它按预期工作。

【问题讨论】:

  • 如果你只有一组坐标,这会容易得多,也许建模为std::pair<int, int>

标签: c++ arrays for-loop


【解决方案1】:

您可以使用 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;
}

【讨论】:

    【解决方案2】:

    你可以用两个 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 而不是数组(删除中间的元素更容易)。这应该会让你的生活更轻松:)

    【讨论】:

    • 这通常是一个非常糟糕的方法,因为它是 O(n²)。
    【解决方案3】:
    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。

    【讨论】:

    • 她/他正在尝试解决不同的问题;给定一个二维点列表,他/她想知道所有点是否不同。示例中的问题不在于点是 (1, 1)(即 x == y),而是在列表中存储 两次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多