【问题标题】:How to Implement an Optimized Coordinate based Data Structure?如何实现优化的基于坐标的数据结构?
【发布时间】:2018-05-16 17:11:12
【问题描述】:

我不知道这样的结构是否已经存在,但我想知道是否有类似于 Map/Hash 的东西具有以下行为:

  • 当一个项目被分配到地图中时,开发者提供一个“矩形对象”(x、y、宽度、高度)作为项目的键。

  • 如果提供的矩形与地图的现有矩形键重叠,则不会发生分配。

  • 为了检索项目,向地图提供 x 和 y 位置,并返回包含该位置的矩形的项目。

【问题讨论】:

  • 你应该寻找 R-tree 的实现。
  • 作为@Eelke,寻找 R-Trees(或更好的 R*Tree (RStarTrees),或者寻找 Quadtrees。

标签: c++ data-structures position maps rectangles


【解决方案1】:

我认为 STL 中没有任何现成的东西,但你可以查看容器的完整列表 here

您可以相当轻松地使用自定义实现来封装自己的实现。

轻量级矩形怎么样:

struct Rectangle {
    int x;
    int y;
    int width;
    int height;
};

然后是一个包含矩形并处理添加检索它们的逻辑的容器:

struct ContainerOfRectangles {
    std::vector<Rectangle> rectangles;

    void AddNew(Rectangle r)
    {
        if (/* some condition is true */)
        {
            rectangles.push_back(r);
        }
    }

    Rectangle GetRectangle(Rectangle referenceRect)
    {
        for (const auto& rectangle : rectangles)
        {
            if (/* some condition on referenceRect and rectangle */)
            {
                return rectangle;
            }
        }
        // Something here if the rectangle wasn't found
        return Rectangle{};
    }
};

如果您愿意,可以将vector 换成其他容器。

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 2014-03-10
    • 2015-08-16
    • 2017-01-19
    相关资源
    最近更新 更多