C++ 如何访问boost graph拓扑布局中的坐标?

C++ 如何访问boost graph拓扑布局中的坐标?,c++,boost,graph,C++,Boost,Graph,我正在尝试创建一个显示简单图形的应用程序,因为我使用boost::graph作为底层数据结构,所以我也想使用库中可用的布局算法 这里给出的答案解释了如何在boost库中使用布局算法来布局图形的顶点: 但遗憾的是,它并没有解释如何在计算布局之后访问顶点的坐标。即使我们得到一个位置向量(或者更确切地说是点),浮动组件也是私有的,所以这没有帮助。图形文档也没有涉及这个主题 那么,在应用了布局算法之后,如何检索每个顶点的简单(X,Y)坐标呢?在查看boost graph源代码之后,结果证明这并不难。

我正在尝试创建一个显示简单图形的应用程序,因为我使用boost::graph作为底层数据结构,所以我也想使用库中可用的布局算法

这里给出的答案解释了如何在boost库中使用布局算法来布局图形的顶点:

但遗憾的是,它并没有解释如何在计算布局之后访问顶点的坐标。即使我们得到一个位置向量(或者更确切地说是点),浮动组件也是私有的,所以这没有帮助。图形文档也没有涉及这个主题


那么,在应用了布局算法之后,如何检索每个顶点的简单(X,Y)坐标呢?

在查看boost graph源代码之后,结果证明这并不难。 我们可以使用属性映射来迭代PositionsMap和[]操作符来访问坐标:

template<typename Graph, typename Positions>
void print_positions(const Graph &g, const Positions &positions) {
    auto index_map = boost::get(boost::vertex_index, graph);

    using PropertyMap = boost::iterator_property_map<Positions::iterator, decltype(index_map)>;
    PropertyMap position_map(positions.begin(), index_map);
    BGL_FORALL_VERTICES(v, graph, Graph) {
        Position pos = position_map[v];
        cout << v << ": " << pos[0] << "|" << pos[1] << endl;
    }
}
模板
无效打印位置(常量图形和g、常量位置和位置){
自动索引映射=boost::get(boost::顶点索引,图形);
使用PropertyMap=boost::迭代器\u属性\u映射;
属性映射位置映射(positions.begin(),index\u映射);
所有顶点的BGL_(v,图,图){
位置pos=位置图[v];

cout Hello,你有这段代码的完整示例吗?因为我似乎无法复制这段代码。@sdgawerzswer抱歉,现在不行了-也许你可以用你的问题问一个新问题,我们可以找出问题所在。我同时编写了一个自定义包装器,它只使用位置:基本上是一个循环,其中pos[0]和pos[1]映射到各个节点。无论如何,谢谢。