我正在生成boost::graph
,边缘约为300k。我在循环中创建了一组边,我还计算了边的一些属性。由于我需要所有边来创建图形,所以我还无法访问edge_descriptor
。有没有办法做到这一点,而不是再次通过整个集合?当我创建边缘时,我使用std::pair<int, int>
,这是否与描述符兼容?
答案 0 :(得分:1)
如果您知道顶点的数量(那么您可以初始化图形,然后可以稍后添加边)。如果您事先不知道顶点的数量,我不知道如何制作图形。
如果你有顶点(例如,如果你得到一个顶点时为顶点创建了vertex_descriptors)那么你可以使用函数boost::add_edge(u,v,the_graph)
在同一个循环中向图形添加边
假设您有图形和vertex_descriptors,如下所示:
//Note: this code is just a guideline, i hope you'd be able to take up from here
typedef typename boost::adjacency_list<boost::listS, boost::vecS,
boost::directedS,Vertex_t*> Graph_t;
typedef typename boost::graph_traits<Graph_t>::vertex_descriptor Vd_t;
然后
Graph_t the_graph(Num_vertices);
Vd_t u,v;
//assign u,v
boost::add_edge(u,v,the_graph)