我想创建一个无限平铺地图,从(-max_int,-max_int)
到(max_int,max_int)
,所以我要创建一个基本结构:chunk
,每个chunk
包含{{} 1}}以及它char tiles[w][h]
坐标,例如int x, y
所以h=w=10
位于tile(15,5)
chunk(1,0)
上,(5,5) coordinate
位于tile(-25,-17)
在chunk(-3,-2)
上{1}}依此类推。现在可以有任意数量的块,我需要存储它们并在(5,3)
或更好(O(logn)
,如果可能的话......)中轻松访问它们。但它不是......)。它应该很容易:添加,删除??(不必)并查找。那么我应该使用什么数据结构?
答案 0 :(得分:3)
读入KD树或四叉树(八叉树的2d变体)。这些都可能是一个很大的帮助。
答案 1 :(得分:0)
所以你的所有空间都被分成了块(矩形簇)。通常问题是将数据存储在稀疏(因为已经实现的集群)矩阵中。为什么不使用两级字典类容器呢?I.e。 rb-tree by row index其中value是rb-tree by column index。或者,如果你很幸运,你可以使用哈希来获得你的O(1)。在这两种情况下,如果找不到行,则在容器中分配它并创建新容器作为值,但最初只有一个块。当然,在现有行上分配新块将比在新行上分配更快,我想这是这种方法的唯一问题。