おそらくばかげた質問ですが、オンラインで答えが見つかりません。私のアプリケーションは、カスタム ファイルからトポロジを読み取り、そこから boost::graph を構築します。私は、より標準的なgraphml表現に移行中です。vertex_descriptor をキーとしてノード プロパティを読み書きできます。同様に、エッジ属性に edge_descriptor を使用できますが、グラフ属性はどうでしょうか。それらがgraphmlファイルで読み取られるとき、それらはどのキータイプに関連付けられますか?
私の疑問を説明するために、グラフを定義してgraphmlファイルを読み取る必要があるコードを次に示します。
struct NetworkNode {
int ponCustomers;
int asid;
}; //bundled property map for nodes
struct NetworkEdge {
int length;
Capacity maxCapacity;
Capacity spareCapacity;
std::set<Flow*> activeFlows;
Capacity peakCapacity;
}; //bundled property map for edges
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS,
NetworkNode, NetworkEdge> DGraph;
typedef DGraph::vertex_descriptor Vertex;
[...]
DGraph topology;
boost::dynamic_properties dp;
dp.property("asid", boost::get(&NetworkNode::asid, topology));
dp.property("ponCustomers", boost::get(&NetworkNode::ponCustomers, topology));
dp.property("length", boost::get(&NetworkEdge::length, topology));
dp.property("maxCapacity", boost::get(&NetworkEdge::maxCapacity, topology));
dp.property("spareCapacity", boost::get(&NetworkEdge::spareCapacity, topology));
dp.property("peakCapacity", boost::get(&NetworkEdge::peakCapacity, topology));
std::map<Vertex, int> avgUsersMap;
boost::associative_property_map<std::map<Vertex, int> >
avgUsersPMap(avgUsersMap);
dp.property("avgUsers", avgUsersPMap);
[...]
try {
boost::read_graphml(stream, this->topology, dp);
} catch [...]
グラフの定義 (作成時など) に役立つプロパティを格納するために新しい連想マップを作成する方法に注目してください。現在、これらのプロパティの一部はグラフ全体に関連しています。たとえば、graphml ファイルで次のように定義できます。
<key id="name" for="graph" attr.name="graphName" attr.type="string" />
この情報が正しく解析されるように、必要な property_map を定義して dp に追加するにはどうすればよいですか?