我需要一个应用程序的空间地图。我找到了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);
如何根据x
和y
坐标检索值?以及如何检查那里是否有值?
答案 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”中有所描述。人。 不幸的是,我不知道这些算法的任何自由实现......