我使用由Boost图形库制作的图形,并且想要访问OutEdgeList来获取/设置一些内部信息(用于构建OutEdgeList的 vector 的保留大小)。
我广泛搜索了文档,但没有找到函数/成员,该函数/成员返回对OutEdgeList的引用或指针。
我的问题是,是否有一种方法可以获取图表OutEdgeList,或者是否可以通过boost来保护用户免于直接破坏其内部结构。
在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中