使用"近似" STL地图

时间:2012-03-26 15:21:35

标签: c++ stl map approximate approximate-nn-searching

我想创建一个STL贴图来查找项目是否足够接近三维空间中的另一个项目。到目前为止,我的“低于仿函数”工作得很好,粘贴到以下链接。

现在这个问题并不是“最近邻居”的问题。相反,它是“在某个距离内是否存在邻居”的问题。

我的例子只显示了一个维度。为清晰起见,我跳过了Y / Z尺寸。

My attempt so far

class ApproximateLessFunctor {
 public:
  ApproximateLessFunctor( float fudgeFactor ) :
    mFudgeFactor( fudgeFactor ) {};

  bool operator()( float a, float b ) const {
    return (a < (b - mFudgeFactor) );
  }

  float mFudgeFactor;
};

typedef map<float, int, ApproximateLessFunctor> XAxisMap;

class XAxis {
 public:
  XAxisMap vMap;

  XAxis(ApproximateLessFunctor functor, float x, int v)
  : vMap( functor )
  {
    vMap.insert(make_pair(x, v));
  }
};

在极少数情况下,我的意思是 - 非常罕见 - 地图在位置重叠时找不到匹配的条目。

我还能做些什么来实现这个,仍然使用STL容器吗?

1 个答案:

答案 0 :(得分:1)

  

现在这个问题并不是“最近邻居”的问题。相反,它是“在某个距离内是否存在邻居”的问题。

尽管如此,后者的表达非常简单。找到最近的邻居,然后确定它是否足够接近。考虑到可用于此任务的数据结构数量,这似乎是一个合理的路径。

kd-tree非常常见且不太难实现。同样相关的是R-tree,虽然我没有实现它,也无法评论它的难度。