C++ Boost.multi-index空间操作

C++ Boost.multi-index空间操作,c++,boost,boost-multi-index,C++,Boost,Boost Multi Index,我需要一个应用程序的空间地图。我找到了Boost.MultiIndex。 我遵循了它,并理解了如何创建类型: typedef boost::multi_index_container<MapNode, indexed_by< ordered_non_unique<member<MapNode, int, &MapNode::X>>, ordered_non_unique<member<MapNode,

我需要一个应用程序的空间地图。我找到了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;

如何根据值的x和y坐标检索值?如何检查是否有值?

首先,您不需要使用boost::multi_index来解决此问题。只需为您的类型MapNode重载操作符<,并使用std::set resp。如果可能出现具有相同坐标的多个节点,则映射。Therby,operater<首先比较例如x值。如果它们相等,则继续比较y坐标

使用boost::multi_index只有一个原因:如果需要不同的访问方法。例如,如果需要一个附加视图,其中节点首先按y排序,而不是按x排序。 但是,上面代码中的multi_索引的成员方法不是一个好主意。使用标识两次,但提供两种不同的比较函数。有关详细信息,请参见boost docu

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

Boost.MultiIndex可能不是此容器的合适容器。使用Boost.MultiIndex,可以获得按x排序的节点视图,或按y排序的节点视图,但如果不通过其中一个视图进行线性搜索,则无法在特定的x和y位置找到节点。MultiArray可能更适合您的需要。感谢您的回答,我已经使用了带有乘素数散列函数的hashmap
Map.insert(Node);