c++ - 读取 graphviz 的点文件而不在 boost 图中存储节点 ID

标签 c++ boost boost-graph

我有一个名为“test.dot”的文件,类似

graph {
    0;
    1;
    0 -- 1;
}
//EOF

我想使用 boost 图形库读取文件。

#include <boost/graph/graphviz.hpp>

using namespace std;
using namespace boost;

int main(int,char*[])
{
    typedef adjacency_list< vecS, vecS, undirectedS, property<vertex_color_t,int> > Graph;
    Graph g(0);

    dynamic_properties dp;
    auto index = get(vertex_color, g);
    dp.property("node_id", index);

    ifstream fin("test.dot");
    read_graphviz(fin, g, dp);
}

然而,在这个源代码中,我不得不附加另一个属性(vertex_color_t)来存储“node_id”。 在我的简单示例中,它与“node_index”相同。

有没有一种方法可以识别它们以节省内存?我不想引入额外的属性。

最佳答案

dynamic_properties 有一个构造函数,它接受一个仿函数来处理默认情况,一个实现是 boost::ignore_other_properties。这有效:

#include <boost/graph/graphviz.hpp>

using namespace std;
using namespace boost;

int main(int,char*[])
{
    typedef adjacency_list< vecS, vecS, undirectedS > Graph;
    Graph g(0);

    dynamic_properties dp(ignore_other_properties);
    ifstream fin("test.dot");
    read_graphviz(fin, g, dp);
}

关于c++ - 读取 graphviz 的点文件而不在 boost 图中存储节点 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637760/

相关文章:

c++ - 传递纹理坐标的 OpenGL 几何着色器

c++ - boost::barrier性能低,等待操作

c++ - 从 boost::labeled_graph 获取节点标签

c++ - 数组新长度错误

c++ - 如何修复 Windows 上 Sublime Text 3 中的 "Permission denied collect2.exe: error: ld returned 1 exit status"

c++ - 取消时可以将 boost::asio::yield_context 用作 deadline_timer 处理程序吗?

c++ - 共享对象静态链接到 boost program_options;申请链接共享

c++ - 边缘列表上带有 map 的 BGL 图

c++ - Boost 图形库 C++/幂律

c++ - 添加到动态数组