2

Boost Graph Library を使用して特定の構造を作成しようとしています。入力ポートと出力ポートを持つノード (頂点) が必要です。各出力ポートは、他のノードの任意の入力ポートに接続できます。特定の出力または入力ポートが他のポートに接続されているかどうかを確認できるようにしたい。

アイデアは、adjacency_list 内の OutEdgeList として std::map を使用することです。

によると:http://www.boost.org/doc/libs/1_52_0/libs/graph/doc/using_adjacency_list.html#sec:choosing-graph-type std::vector の 1 つしか選択できません。 std::list、std::slist、std::set、std::multiset、および std::hash_set。(タイプとして mapS を選択できますが、std::set として実装されており、キーで値を取得できません)

いくつか質問があります。

  1. std::map を使用することは可能ですか? はいの場合、どのように?
  2. std::map を使用しているときに頂点の入力を反復処理するにはどうすればよいですか?
  3. 上記が不可能な場合、問題に合った構造をどのように実装できますか?

ありがとうございました!

4

2 に答える 2

2

最終的に、BGL ほどハッキーではないLemon グラフ ライブラリに切り替えました

于 2012-12-07T10:12:22.343 に答える
0

出力エッジを格納するためのデータ構造としてマップを使用できない理由がわかりません。Map には、 などと同様に機能する反復子がありますstd::vector。入力エッジを処理するには、各頂点に 2 つのマップが必要です。AFAIK BGL は、頂点の両方のリストをサポートしています。

BGL を変更 (ハッキング) して、何が起こるかを確認することをお勧めします。その変化は小さくないかもしれません。新しいタイプのコンテナに adjacency_list の特殊化を提供する必要があります。ほとんどの場合、これでうまくいきます。

于 2012-11-14T09:13:23.013 に答える