我被要求编写一个函数,该函数接受“LatLon”作为输入(LatLon 是一个具有 2 个双精度数的类:纬度和经度)并返回距离该位置最近的交叉点的 ID(int)。我得到的函数可以返回任何交叉点的位置,也可以返回两个位置之间的距离。由于“性能测试”,我的导师建议我将所有交叉点的位置存储在 R 树中(来自 boost 库),这样可以更快地找到最近的交叉点,而不是迭代所有交叉点。然而,我刚刚学习 R 树是如何工作的,并且在如何创建 R 树方面遇到了困难。
问题是我在网上看到了几个他们创建 R 树的例子,但真正让我困惑的是他们在其中一个构造函数中只使用了两个参数,而不是四个。例如,他们使用:
bgi::rtree< value_t, bgi::quadratic<16> > rtree_;
其中 value_t 是一对 box 和 unsigned int,另一个参数是大小,但是如果我尝试这样做:
bgi::rtree<点,bgi::quadratic<16>>交集RTree;
其中 point 是一对 unsigned int 和 LatLon,编译器抱怨我没有使用正确的构造函数,并且它应该有四个参数而不是两个。
我在网上阅读过,发现我应该使用这个构造函数:
rtree(parameters_type const &、indexable_getter const &、value_equal const &、allocator_type const &)
但是,我不明白每个参数的描述,所以我不知道如何使用这个构造函数。那么,您能帮我了解该怎么做吗?如果可能的话,您能给我一个简短的例子吗?非常感谢。
这是 LatLon 类。它是只读的,所以我无法修改它:
class LatLon{
public:
LatLon(){}
explicit LatLon(float lat_, float lon_) : m_lat(lat_),m_lon(lon_){}
double lat() const { return m_lat; }
double lon() const { return m_lon; }
private:
float m_lat = std::numeric_limits<float>::quiet_NaN(); …Run Code Online (Sandbox Code Playgroud)