C ++
我在项目中使用Boost Graph Library,它被声明为:
typedef adjacency_list <listS, listS, undirectedS, TrackInformation, LinkInformation> TracksConnectionGraph;
直到我必须在我的图上调用connected_components之前,情况才会好转。
typedef std::map<TracksConnectionGraph::vertex_descriptor, TracksConnectionGraph::vertices_size_type> component_type;
component_type component;
boost::associative_property_map< component_type > component_map(component);
int num_components = connected_components(tracks_connection_graph_, component_map);
问题似乎是,如果VertexList = listS,我没有vertex_index作为我的顶点的属性。 这使connected_components给我这样的错误:
/usr/local/include/boost-1_39/boost/property_map.hpp:在成员函数'R boost :: iterator_property_map :: operator [](typename boost :: property_traits :: key_type)const [with RandomAccessIterator = __gnu_cxx :: __ normal_iterator ,IndexMap = boost :: adj_list_vertex_property_map,boost :: detail :: error_property_not_found,const boost :: detail :: error_property_not_found&,boost :: vertex_index_t>,T = boost :: default_color_type,R = boost :: default_color_type&]':
所以问题是:我如何添加vertex_index作为我的顶点的属性?
如果我添加它,是否意味着每当我调用add_vertex,remove_vertex等时,我都必须为每个顶点更新这些信息?
您可以将vertex_index
属性添加到图形类型的定义中(在adjacency_list
的顶点属性模板参数中,将TrackInformation
更改为property<vertex_index_t, size_t, TrackInformation>
)。 在调用算法之前,您需要使用以下循环填充属性映射:
size_t index = 0;
BGL_FORALL_VERTICES(v, tracks_connection_graph_, TracksConnectionGraph) {
put(vertex_index, g, v, index++);
}
链接地址: http://www.djcxy.com/p/51051.html
上一篇: c++