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、operer< は (たとえば) 最初に x 値を比較します。それらが等しい場合は、y 座標の比較に進みます。

boost::multi_index を使用する理由は 1 つだけです。異なるアクセス方法が必要な場合です。たとえば、ノードが最初に y でソートされ、さらに x でソートされる追加の「ビュー」が必要な場合。ただし、(上記のコードのように) multi_index のメンバー アプローチはお勧めできません。ID を 2 回使用しますが、2 つの異なる比較関数を提供します。詳細はブースト ドキュメントにあります。

最後に、アプリケーションによっては、これらすべてのアプローチが最善の方法ではない場合があります。特殊化されたデータ構造は、たとえば、Berg et. アル。残念ながら、私はこれらのアルゴリズムの自由な実装を知りません...

于 2011-09-09T08:17:17.523 に答える