Hi,
I try to write my graph to std::cout with boost::write_graphviz.
In the example boost/libs/graph/example/graphviz.cpp,
the graph used is a
boost::adjacency_list<vecS, vecS, directedS,
property<vertex_name_t, std::string>,
property<edge_weight_t, double> >
and all work fine.
my graph is a
boost::adjacency_list<listS, listS, bidirectedS,
property<my_vertex_t, my_vertex>,
property<my_edge_t, my_edge>,
property<my_graph_t, my_graph> ,
listS >
If a do "write_graphviz(std::cout, g);"
I have a very big error. (why BGL didn't use boost concept check ???)
I search in boost code and i found !!!
In the file boost/graph/graphviz.hpp line 257 (boost
1.34)
"out << get(vertex_id, *i);"
so write_graphviz function get the vertex property with the tag of type vertex_id.
By default, the type vertex_id is the enum boost::vertex_index
which do reference to the type boost::vertex_index_t;
This property is intrinsically in the type boost::adjacency_list<vecS, vecS>
because the vertex_descriptor is the index of the vertex. And so all work fine with
the function write_graphviz
With the type boost::adjacency_list<vecS, listS>, this property is not available. TOOOOOO
In the complete signature function :
void write_graphviz(std::ostream &, const VertexListGraph & g
vertexPropertyWrite vpw,
EdgePropertyWriter epw,
GraphPropertyWriter gpw,
VertexID vertex_id);
I can give the property_tag to used in the function.
But, In opposition to other BGL algorithm which accept an external PropertyMap,
this property must be in the graph. And I don't want to add a index property.
Question :
How to use write_graphviz algorithm with boost::adjacency_list<listS, listS> ?
Is there a magic boost property tag to use with a boost::adjacency_list<listS, listS>
like the boost::vertex_index_t tag and the boost::adjacency_list<vecS, vecS>
is there another solution ??
Thank
David Callu