c++ - 在 C++ 中使用 map 而不是 array 来保护在数组边界之外的搜索?

标签 c++ arrays dictionary

我有一个已读入数组的网格化矩形文件。该网格化文件包含数据值和 NODATA 值;数据值在数组内部构成一个连续的奇数形状,NODATA 值填充其余部分以保持网格化文件为矩形。我对数据值执行操作并跳过 NODATA 值。

我对数据值执行的操作包括检查 8 个周围的邻居(当前单元格是 3x3 网格的中心)。当八个邻居中的任何一个是 NODATA 值时,我可以处理,但是当实际数据值落在第一行或最后一行/列中时,我会通过尝试访问不存在的数组值来触发错误。

为了解决这个问题,我考虑了三种选择:

  1. 添加带有 NODATA 值的新的第一行和最后一行/列,并相应地调整我的代码 - 我可以循环遍历内部“原始”数组并处理新的 NODATA 值,就像我已经处理的边缘一样不要落在第一行和最后一行/列中。

  2. 我可以创建特定的流程来处理第一行和最后一行/列中包含数据的单元格 - 修改过的 for 循环(一个逐步执行的 for 循环一个特定的序列/范围)只检查存在的周围单元格,但因为我仍然需要 8 个相邻值(NODATA/不存在的单元格被赋予与中央单元格相同的值)我必须将空白/NODATA 值复制到辅助 3x3 网格。虽然也许有办法避免二次网格。这个解决方案很烦人,因为我必须为所有角单元格(4 个不同的 for 循环)和第一行或最后一行/列中的任何单元格(另外 4 个不同的 for 循环)。对任何非边缘单元格使用单个 for 循环。

  3. 根据我的阅读,使用 map 似乎能够存储原始数组,同时让我搜索数组外的位置而不会触发错误。在这种情况下,我仍然必须给这些不存在的单元格一个值(等于数组的中心),因此可能也可能不需要设置辅助 3x3 网格;再一次,也许有一种方法可以避免二次网格。

解决方案 1 似乎最简单,解决方案 3 最聪明,而解决方案 2 最烦人。我缺少任何解决方案吗?或者这些解决方案中的一种是否应该成为明显的赢家?

最佳答案

我的建议是用函数替换对数组的所有读取访问。例如,arr[i][j] by getarr(i,j)。这样,您的所有算法代码都或多或少保持不变,并且您可以轻松地为超出范围的索引返回 NODATA

但我必须承认这只是我的意见

关于c++ - 在 C++ 中使用 map 而不是 array 来保护在数组边界之外的搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28425092/

相关文章:

c++ - Boost:创建一组线程并等待它们的正确用法是什么?

c++ - 将继承更改为虚拟的后果?

c - 我怎样才能在整数数组中找到一个模式?

ios - 无法使用类型为 ( ['NSObject' )、forKey : String) 的参数列表调用 updateValue

python - 将字典写入 .csv

C++ 将第二个元素添加到 BST - 段错误

c++ - 在狮身人面像文档中提取C++代码段

java - 将 ArrayOFByte 转换为 int []

javascript - 如何在 JavaScript 中过滤和映射对象数组?

objective-c - 如何以编程方式从内置 iOS 词典中搜索单词?