境界矩形に含まれる一連の幾何学的オブジェクトを「選択」するために使用される R ツリーを実装する方法を理解しようとしています。データ レイアウトの例をB-Treeとして示している Wikipedia の記事を調べました。
B ツリーを作成し、それを使用して R ツリーを作成することもできますが、これらは 2 つの複雑なデータ構造であり、デバッグやテストなどを行う必要があります。既存のツリー実装 (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 として動作しますか? そうでない場合、車輪を再発明せずにこの問題を解決するにはどうすればよいですか?