如何处理任意增长的稀疏数组 我正在寻找一个(C++)数据结构来存储关于2D网格上的点的信息。将为网格的某一部分填充一些初始值,然后以非确定性方式设置新点,一次一个。棘手的是,新点并不总是添加到阵列的同一侧。网格需要能够向任何方向(上/左/下/右)增长

如何处理任意增长的稀疏数组 我正在寻找一个(C++)数据结构来存储关于2D网格上的点的信息。将为网格的某一部分填充一些初始值,然后以非确定性方式设置新点,一次一个。棘手的是,新点并不总是添加到阵列的同一侧。网格需要能够向任何方向(上/左/下/右)增长,c++,arrays,multidimensional-array,sparse-matrix,C++,Arrays,Multidimensional Array,Sparse Matrix,也有可能在阵列的当前范围之外添加多个点。从这个意义上讲,稀疏数组似乎在某种程度上是适用的,尽管数据并不特别稀疏,而且预计最终会填补空白。此外,稀疏数组仍然无法解决我的“无法在数组后面添加内容”问题 我想到的一个可能的解决方案是使用散列映射,其中键表示坐标 std::map<std::vector<int>, MyStructClass> gridMap; gridMap[{1,2}] = myStructInstance1; gridMap[{-2,4}] = myStr

也有可能在阵列的当前范围之外添加多个点。从这个意义上讲,稀疏数组似乎在某种程度上是适用的,尽管数据并不特别稀疏,而且预计最终会填补空白。此外,稀疏数组仍然无法解决我的“无法在数组后面添加内容”问题

我想到的一个可能的解决方案是使用散列映射,其中键表示坐标

std::map<std::vector<int>, MyStructClass> gridMap;
gridMap[{1,2}] = myStructInstance1;
gridMap[{-2,4}] = myStructInstance2;
//...etc
MyStructClass whatsAtSomePosition = gridMap[{3,1}];
std::map gridMap;
gridMap[{1,2}]=myStructInstance1;
gridMap[{-2,4}]=myStructInstance2;
//…等等
MyStructClass whatsAtSomePosition=gridMap[{3,1}];

我不相信这是最有效的数据结构,但我还没有找到其他适合我需要的东西。C++中有什么其他的选择?< /P>不是<代码>地图<代码> >代码> unordeDeMald[/Case]一个基本稀疏数组实现?如果最终填充空缺,那么有没有合理的或已知的大小,不会超过?@伯纳德,你是对的,我可以假设它不会在任何方向上增长超过100左右。是的,
unordered_map
似乎是表示稀疏数组的一种简单方法,特别是考虑到我不需要对它执行任何矩阵式的操作。如果它只有100左右,并且您想要快速性能,我宁愿不使用稀疏数组。我可能会在一个
std::deque
上写一个包装器,这样我就可以使用负索引,如果我需要在一个还不存在的索引中存储一些东西,我可以在任一侧增加
deque
。拥有40000个
MyStructClass
不会接近1MB,除非
MyStructClass
包含一个大的静态数组。这听起来像是两个链表的情况。