I wonder what is the fastest method to access edge properties of an adjacency_list when iterating over edges. Actually, the only way I know of for accessing properties is via operator[]:
typedef boost::adjacency_list<listS, vecS, boost::directedS, NodeProperty, EdgeProperty > Graph;
Graph g;
for( tie( ei, ei_end ) = edges( graph ); ei != ei_end; ++ei )
{
g[*ei]=something;
}
>From this I conclude, that the right EdgeProperty is stored in some associative container, with edge_descriptor being the key-type. Or does edge_iterator store any information besides a pair<vertex_descriptor, vertex_descriptor>? What is the time complexity of this look_up?
To me it feels that there should be a faster way to access properties via an edge_iterator, and by browsing the source I found that edge_iterator has a member function get_property(), however, since it returns void*, and I did not find anything in the documentation, I'm not sure if it is there for this purpose.
That's probably the best way to think of it. For an adjacency_list, the edge descriptor is actually a triple of (u, v, p), where p is a pointer to the stored edge property. Operator[] just deref's that pointer, giving you the edge property in constant time.
Andrew Sutton