1

C++(11) の設計上の問題は次のとおりです。

ノード/エッジを任意の属性にマップできるグラフデータ構造を作成したいとします。(それがグラフであることは実際には関係ありません。属性を持つ要素のコンテナである可能性がありますが、これは私の例です。)

このようなデータ構造を使用すると、すべてのノードに新しい属性を動的に追加できます。

Graph G;

G.addNodeMap("color", "white"); // map name, default value

...そしてノードに設定します:

node v;
G.setAttr("color", v, "blue");

...そして、メモリを節約するために属性も削除します。

G.deleteNodeMap("color");

G.addNodeMapマップの識別子 (おそらく文字列) とエントリのデフォルト値を取ります。C++11 ではT、「ノード マップ」の型は、与えられたデフォルトの引数から簡単に推測できます。std::vector<T>ノードは単なるインデックスであるため、ノード マップ自体が である可能性があります。

std::vector<std::string> map1問題: ベクトル、std::vector<std::double> map2std::vector<Foo> map3....をどこに保存しますか?

この問題は、動的型付け言語では発生しません。この動作を C++ で実装するにはどうすればよいですか?

4

1 に答える 1

2

Boost.Graph Library (BGL)のプロパティ マップを参照してください。

グラフの抽象的な数学的性質と、それらが解決するために使用される具体的な問題との間の主なリンクは、グラフの頂点とエッジに関連付けられているプロパティ、つまり距離、容量、重み、色などです。多くの方法があります。データ構造の実装の観点からプロパティをグラフにアタッチしますが、グラフ アルゴリズムはプロパティの実装の詳細を処理する必要はありません。セクション プロパティ マップの概念で定義されているプロパティ マップ インターフェイスは、グラフからプロパティにアクセスするための一般的な方法を提供します。これは、プロパティにアクセスするために BGL アルゴリズムで使用されるインターフェイスです。

于 2013-02-05T13:08:42.900 に答える