0

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

4

1 回答 1

0

首先,你不需要 boost::multi_index 来解决这个问题。只需为您的类型 MapNode 重载 operator< 并使用 std::set (如果可能出现具有相同坐标的多个节点,则分别为 std::map )。Therby, operator< 首先比较(例如)x 值。如果它们相等,则继续比较 y 坐标。

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

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

于 2011-09-09T08:17:17.523 回答