次のようなデータ構造を解析するアプリケーションを作成しています
struct Block
{
std::string foo;
/* ... even more local data ... */
};
std::map<std::string, Block> blockContainer; // Each Block will have a name here
struct Signal
{
// the direct links to the Blocks, no redundant storage of the name so that an
// simple renaming of a Block would be possible
std::map<std::string, Block>::iterator from;
std::map<std::string, Block>::iterator to;
std::string bar;
/* ... even more local data ... */
};
std::vector<Signal> signalContainer;
このリストの解析と入力は非常に簡単でした。ここで、シグナルに応じてブロックのトポロジカル ソートを行う必要があります。これも、 を使用すると非常に簡単Boost::Graph
です。
しかし、最初にそれを STL データ構造で解析してから Boost::Graph 構造にコピーすることは、私にはあまり意味がありません。特に、後でこのデータを使用して行われるのは、おそらくいくつかの単純な変更 (ブロックとシグナルの追加/削除、いくつかのシグナルの再ルーティング、再シリアル化) であり、後で新しいトポロジー ソートが行われるためです。
したがって、これらの可能な解決策のいずれでも問題ありません。
- Boost::Graph をコンテナで直接動作させる
- データを Boost::Graph データ構造に直接解析します (たとえば、 のようなバンドルされたプロパティを持つグラフを使用します
boost::adjacency_list<boost::mapS, boost::vecS, boost::directedS, Block, Signal>
) 。
しかし、私はどちらかを行うためにここにあるドキュメントを理解できるほど頭が良くないようです。また、ネットで見つけたすべての例は、バンドルされたプロパティの使用方法を示していましたが、オンザフライでグラフを構築する方法は示していませんでした。(もちろん、ノードと頂点のプロパティを同時に使用したり、ノードに a を使用しstd::map
てノードに名前でアクセスしたりする方法はありません...)
誰かが私を助けることができますか?
ありがとう!