我认为从boost :: geometry库中使用r-tree似乎是一个很好的解决方案。我发布的代码如下:
#include<stdio.h>
#include <boost/geometry.hpp>
#include <boost/geometry/extensions/index/rtree/rtree.hpp>
#include <vector>
#include <boost/geometry.hpp>
#include <boost/geometry/extensions/index/rtree/rtree.hpp>
#include <random>
#include <iostream>
#include <exception>
#include <boost/foreach.hpp>
int main(void)
{
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
typedef bg::model::point<float,2,bg::cs::cartesian> point;
typedef bg::model::box<point> box;
typedef bgi::rtree<box,unsigned > rtreeType;
rtreeType rtree(6,3);
for(unsigned i=0; i<10; i++)
{
box b(point(i+0.1f,i+0.1f),point(i+0.5f,i+0.5f));
rtree.insert(b,i);
}
box query_box(point(0,0),point(5,5));
rtree.print();
std::cout<<"number of elements: ";
std::cout<<rtree.elements()<<std::endl;
// application 1: search for boxes that are within query_box
std::deque<unsigned> &boxValue=rtree.find(query_box);
return 0;
}
这取决于操作的类型。你有一些示例代码来分享? – Hayt
您可以细分2D空间。制作一个树状结构(如二元空间树)。 –