Я думаю, что нашел такой механизм. Он называется labeleled_graph и является частью BGL.
Вместо использования adjacency_list можно использовать предопределенную оболочку labeled_graph :
typedef boost::labeled_graph<
boost::adjacency_list< boost::vecS, boost::vecS, boost::directedS, Data >,
std::string
> Graph;
После определения графа, подобного этому, можно получить доступ к вершинам следующим образом:
Graph g;
boost::add_vertex( "Alpha", g );
g["Alpha"].name = "Alpha";
g["Alpha"].value = 10;
boost::add_vertex( "Beta", g );
g["Beta"].name = "Beta";
g["Beta"].value = 20;
boost::add_edge_by_label( "Alpha", "Beta", g );
Побочным эффектом этого является необходимость использования функции-члена graph () для работы некоторых алгоритмов:
std::vector< Graph::vertex_descriptor > container;
boost::topological_sort( g.graph(), std::back_inserter( container ) ) ;
По какой-то причине labeleled_graph не описан в документации BGL, но отображается в папке с примерами.
Спасибо за ответ,
Serge