Boost.MultiIndex空间操作

时间:2011-09-03 03:57:59

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

我需要一个应用程序的空间地图。我找到了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坐标检索值?以及如何检查那里是否有值?

1 个答案:

答案 0 :(得分:0)

首先,您不需要boost :: multi_index来解决此问题。简单地重载运算符&lt;对于您的类型MapNode并使用std :: set(如果可能出现具有相同坐标的多个节点,则为resp.std :: map)。 Therby,operater&lt;首先比较(例如)x值。如果它们相等,则继续比较y坐标。

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

最后,根据您的应用,所有这些方法可能都不是最好的方法。专门的数据结构例如是在Berg等人的书“Computational geometry”中有所描述。人。 不幸的是,我不知道这些算法的任何自由实现......