【问题标题】:Boost.MultiIndex spatial operationsBoost.MultiIndex 空间操作
【发布时间】:2011-09-03 03:57:58
【问题描述】:

我需要一个应用程序的空间地图。我找到了 Boost.MultiIndex。
我关注了它的tutorial 并了解了如何创建类型:

typedef boost::multi_index_container<MapNode,
    indexed_by<
        ordered_non_unique<member<MapNode, int, &MapNode::X>>,
        ordered_non_unique<member<MapNode, int, &MapNode::Y>>
    >
> Map_T;

以及如何插入:

Map.insert(Node);

如何根据xy 坐标检索值?以及如何检查那里是否有值?

【问题讨论】:

  • Boost.MultiIndex 可能不是合适的容器。使用Boost.MultiIndex,您可以获得按x 排序的节点或按y 排序的节点的视图,但是您无法在特定的xy 处找到节点(没有通过其中一个进行线性搜索)意见)。 Boost.MultiArray 可能更适合您的需求。

标签: c++ boost boost-multi-index


【解决方案1】:

首先,你不需要 boost::multi_index 来解决这个问题。只需为您的类型 MapNode 重载 operator

使用 boost::multi_index 的原因只有一个:如果需要不同的访问方法。例如,如果您想要一个额外的“视图”,其中节点首先按 y 排序,而不是按 x 排序。 但是, multi_index 的成员方法(如上面的代码)不是一个好主意。两次使用标识,但提供两种不同的比较函数。详细信息可以在 boost 文档中找到。

最后,所有这些方法可能都不是最好的方法 - 取决于您的应用程序。专门的数据结构是例如Berg等人在“计算几何”一书中描述了这一点。人。 不幸的是,我不知道这些算法的任何免费实现......

【讨论】:

  • 感谢您的回答,我已经使用带有乘以素数哈希函数的 hashmap 做到了
猜你喜欢
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
相关资源
最近更新 更多