将2D数组的每个元素与其余C ++进行比较

时间:2018-10-26 09:19:20

标签: c++ arrays matrix

我是C ++的新手,我要做的是编写一种方法来检查2D数组是否包含任何重复项。

例如,我有一个matrix[3][4],我已经能够将第一个元素[0][0]与其余元素进行比较,直到最后一个[2][3]。 问题是我不知道如何进行,我应该做的是该方法然后将元素[0][1]与其余元素(当然除了前一个元素及其本身)进行比较等等。

1 个答案:

答案 0 :(得分:0)

首先,在这种情况下,它是2D数组无关紧要;您想在整个数组中查找重复项,因此无论如何还是最好使用一维索引。巧合的是,这是在C ++中处理二维数组的一种建议方法。

因此,假设您可以按某种顺序放置索引,通常的想法是检查所有具有后续元素的元素。这将为您提供 O(n 2 。毫无疑问,伪代码是两个循环,并且是例如用于碰撞检测:

for (iterA = 0; iterA < num - 1; iterA++) {
    for (iterB = iterA + 1; iterB < num; iterB++) { // note how iterB starts one further
        if (*iterA == *iterB)
            return true; // found a duplicate
    }
}

在2D数组的情况下,*iterA取消引用可以用将复合一维索引分解为两个部分(例如,与i % width, i / width。再次,这是一个非常常见的模式。

话虽这么说,为什么要打扰?制作一个std::set,开始一个接一个地放置元素,并在每次插入之前调用find。如果find返回某些内容,请中断。