我使用由Boost图形库制作的图形,并且想要访问OutEdgeList来获取/设置一些内部信息(用于构建OutEdgeList的 vector 的保留大小)。

我广泛搜索了文档,但没有找到函数/成员,该函数/成员返回对OutEdgeList的引用或指针。

我的问题是,是否有一种方法可以获取图表OutEdgeList,或者是否可以通过boost来保护用户免于直接破坏其内部结构。

c++ - 如何在BGL图中获取OutEdgeList-LMLPHP

another question中,我找到了一个示例,您可以使用graph.m_edges直接访问EdgeList,并且还可以将其用作 vector 来执行graph.m_edges.reserve(115960001),因此,我希望也应该有一种方法可以访问OutEdgeList。

任何帮助表示赞赏!

最佳答案

获取OutEdgeList的正确方法是遍历所有m_vertices并访问其m_out_edges属性。

VertexIterator vi, vi_end;
for (boost::tie(vi, vi_end) = vertices(graph); vi != vi_end; ++vi){
     graph.m_vertices[*vi].m_out_edges.reserve(6);
}

通过为每个顶点保留适当数量的边缘,我将内存使用量从12GB减少到10.5GB。

我花了相当长的时间才能找到成员,因为我希望他们位于boost/graph/adjacency_list.hpp中,但是他们位于boost/graph/detail/adjacency_list.hpp

09-06 05:45