提振.多索引空间操作

Boost.MultiIndex spatial operations

本文关键字:操作 空间 索引 提振      更新时间:2023-10-16

我需要一个应用程序的空间地图。我找到了Boost.MultiIndex.
我遵循了它的教程,了解了如何创建一个类型:

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::multi_index来解决这个问题。简单地重载operator

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

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