BGL indexando um vértice por chaves

Meu requisito é ter uma estrutura gráfica em que cada vértice seja identificado exclusivamente por umboost::uuids::uuid. Todos os vértices têm uma propriedade de cor pela qual os vértices de categoria semelhante serão agrupados. Não estou trabalhando em um mapa estático, vértices e bordas serão criados e removidos dinamicamente.

typedef boost::adjacency_list<
      boost::listS,
      boost::listS,
      boost::bidirectionalS,
      boost::property<boost::vertex_index_t, boost::uuids::uuid, 
        boost::property<boost::vertex_color_t, resource_color,
          boost::property<boost::vertex_underlying_t,   boost::shared_ptr<actual_object*> > > >,
      detail::edge_property
      > graph_type;
graph_type _graph;
boost::property_map<graph_type, boost::vertex_index_t>::type    _index_map;
boost::property_map<graph_type, boost::vertex_color_t>::type    _color_map;
boost::property_map<graph_type, boost::vertex_underlying_t>::type   _underlying_map;

Noconstrutor Estou criando todos os 3 mapas

_index_map = boost::get(boost::vertex_index_t(), _graph);
_color_map = boost::get(boost::vertex_color_t(), _graph);
_underlying_map = boost::get(boost::vertex_underlying_t(), _graph);

enquantoadicionando um vértice

add_resource(resource_color c, actual_object* o){
  graph_type::vertex_descriptor v = boost::add_vertex(o->uuid(), _graph);
  _color_map[v] = c;
  _underlying_map[v] = o;
}

ParaListaUUID de um vértice

uuid_list list;
boost::graph_traits<graph_type>::vertex_iterator vi, vi_end;
for(boost::tie(vi, vi_end) = boost::vertices(_graph); vi != vi_end; ++vi){
  list.push_back(_index_map[*vi]);
}
return list; 

Desta forma, eu estou sempre iterando através dos vértices do gráfico e obtendo suas propriedades. No entanto, eu quero o outro caminho também. Do UUID ao vértice, como um std :: map paralelo, que será atualizado automaticamente com operações de adição / remoção ou algo semelhante.

Também não consigo manter um externostd::map e sincronizar manualmente, porqueboost::adjacency_list<boost::listS, boost::listS>::vertex_descriptor avalia comovoid* e preciso de suporte de serialização.

Então, as seguintes coisas são factíveis

encontre o vértice atravésboost::vertex_index_t valoriterar através de umboost::property_mapsincronizando um externostd::map oubimap comindex propriedade

questionAnswers(1)

yourAnswerToTheQuestion