代码之家  ›  专栏  ›  技术社区  ›  PiotrK

C语言中自定义类字典集合的快速二维积分坐标#

  •  1
  • PiotrK  · 技术社区  · 7 年前

    我需要一个快速的集合,将2d int类型的点映射到c_中的自定义类。

    该系列需要:

    • 快速查找(自定义类的坐标),如果不存在则添加点
    • 快速删除关键点的范围(超出给定矩形)。这实际上排除了 Dictionary<Point2D, ...> ,正如分析发现的那样,在我的示例实现中,此操作占用了整个帧时间的35%:-(

    编辑: 强调:我想删除给定rect之外的所有字段(删除未使用的缓存)

    坐标可以取任何int值(它们用于缓存[几乎]无限的等轴测二维地图图块,这些图块靠近统一的相机)。

    这些点将始终以矩形结构组织(我可以放宽此要求以始终遵循矩形,实际上我使用的是等轴投影)。

    结构本身用于缓存特定于图块的数据(如图块转换)

    2 回复  |  直到 7 年前
        1
  •  1
  •   Spinnaker    7 年前

    编辑:更新讨论结果

    您可以对缓存中的每个“块”使用稀疏的静态矩阵,并使用光标来表示当前的视区。然后,您可以使用模数数学或四叉树来访问每个块,具体取决于具体的用例。

    老回答:

    如果它们是等距的,那么为什么需要散列呢?您可以使用一个带有空值的对象矩阵,如果其中没有缓存任何内容,则默认值为空。

    因为您使用的是对象,数组实际上只是引擎盖下的引用,所以数组的内存占用不会真正受到空值的影响。

    如果你真的需要它是无限的,你可以用四叉树来嵌套矩阵,并创建某种“块”系统。

        2
  •  1
  •   Nick    7 年前

    我想这就是你需要的: RTree