【发布时间】:2015-02-06 23:07:03
【问题描述】:
我有一个图( adjacency_list (listS, vecS, bidirectionalS, VertexVal) ),我需要在其中删除 100,000 多个节点。每个节点还包含一个由 2 个 64 位整数和另一个 64 位整数组成的结构。下面代码中发生的 guid 检查是检查结构中的第一个整数。
在我的笔记本电脑(i7 2.7GHz,16GB RAM)上,根据 VTune 大约需要 88 秒。
以下是我删除节点的方法:
vertex_iterator vi,vi_end;
boost::tie(vi, vi_end) = boost::vertices(m_graph);
while (vi!=vi_end) {
if (m_graph[*vi].guid.part1 == 0) {
boost::remove_vertex(*vi,m_graph);
boost::tie(vi, vi_end) = boost::vertices(m_graph);
} else
++vi;
}
Vtune 显示 boost::remove_vertex() 调用需要 88.145 秒。有没有更有效的方法来删除这些顶点?
【问题讨论】:
-
并且图类型是...(您应该指定相关信息。(捆绑的)属性,容器选择,它们会产生巨大的影响)
-
adjacency_list with (listS, vecS, bidirectionalS, VertexVal.)
-
每个节点还包含一个顶点值,它是一个包含 3 个 64 位整数的结构。
-
guid 是一个包含 2 个 64 位整数的结构 - 我上面提到的 2/3 个整数。我将编辑问题 - 问题已解决:)