我正在尝试理解如何实现R-Tree,它将用于在包围矩形中选择一组几何对象。我查看了维基百科上的文章,其中展示了数据布局的示例作为B-Tree。
我可以编写B-Tree并使用它来编写R-Tree,但这是两个复杂的数据结构,我必须进行调试、测试等操作。我宁愿重用现有的树实现(std::set/multiset)并提供排序操作。
假设我有以下接口用于我的形状:
提供此函数对象以对形状进行排序:
我可以编写B-Tree并使用它来编写R-Tree,但这是两个复杂的数据结构,我必须进行调试、测试等操作。我宁愿重用现有的树实现(std::set/multiset)并提供排序操作。
假设我有以下接口用于我的形状:
class Shape
{
public:
Shape();
virtual ~Shape();
const AABB & bounding_box() const = 0;
};
提供此函数对象以对形状进行排序:
struct OrderShapes
{
bool operator()(Shape * const & left, Shape * const & right) const
{
return right->bounding_box().contains(left->bounding_box());
}
};
如果我使用 std::set<Shape *, OrderShapes>
,它能作为一个有效的 R-Tree 吗?
如果不能,我该如何解决这个问题而不必重新发明轮子?