我有一个初始化为Storage[100][3]
的2D数组。
我将一个组值插入到数组的每一行,然后移到下一行并执行相同的操作, 例如:
1 1 3
2 5 6
3 1 3
(继续前进到100行)
在完成插入1整行之后,我想检查当前插入的第2列和第3列中的值是否与前一行,第39列中的值相匹配; s 2和3。
例如,在上面的数据集中,我查看每行中的第2列和第3列,并看到第1行和第3行在这些列中具有相同的值。
我编写了一个程序,可以将当前插入与上一次插入进行比较。但我想将当前插入与数组中的所有插入进行比较。
const int col=0;
//inserting the values//
for (int row= 0; row < 100; row++) {
storage[row][col] = t;
storage[row][col += 1] = xi;
storage[row][col += 2] = yi;
}
//trying to check if the values are same. need help here//
for (int row = 0; row < 100; row++) {
if (storage[row][col + 1]==storage[row + 1][col + 1]
&& storage[row][col + 2] == storage[row + 1][col + 2]) {
}
}
答案 0 :(得分:0)
for (int row = 1; row < 100; row++) {
for (int prevRow = 0; prevRow < row; prevRow++) {
if (storage[row][1] == storage[prevRow][1]
&& storage[row][2] == storage[prevRow][2]) {
// do something...
}
}
}
外部循环从row = 1
开始,因为第0行没有要比较的先前行。
答案 1 :(得分:0)
如果要创建一个可以很好地扩展O(log2n)而不是O(n ^ 2)的算法,请尝试使用哈希表来跟踪遇到的数字。我的第一次迭代的示例数字是4,2,3 您可以计算您遇到重复数字的次数,最重要的是,您不必自行完成循环搜索!
int main(array<System::String ^> ^args)
{
std::map<int, int> twoColsCounts;
int storage[100][3];
int ordinal1 = 4;
int ordinal2 = 2;
int ordinal3 = 3;
for (int i = 0; i < 100; i++)
{
storage[i][0] = ordinal1;
storage[i][1] = ordinal2;
storage[i][2] = ordinal3;
int lastTwoDigits = ordinal2 * 10 + ordinal3;
auto inMapRecord = twoColsCounts.find(lastTwoDigits);
if (inMapRecord != twoColsCounts.end())
{
// Number Already Found. Increment count for posterity!
twoColsCounts[lastTwoDigits]++;
}
else
{
// Not already encountered - Add it to record with count of 1
twoColsCounts[lastTwoDigits] = 1;
}
}
Console::WriteLine(L"Done 'big data' style!");
return 0;
}
祝你好运!