C++ 使用顶点描述符boost图打印或迭代顶点

C++ 使用顶点描述符boost图打印或迭代顶点,c++,boost,graph,vertex,descriptor,C++,Boost,Graph,Vertex,Descriptor,构建一个boost图,其中添加的边区域(如下)和v1定义为 gm->create_edge(v1,v2,1); boost::graph_traits<Graph>::vertex_descriptor v1 = gm-> create_vertex("one",1,1); 这很接近。顶点(g)返回迭代器对。间接指向迭代器将得到描述符。在您自己的示例中,v是顶点迭代器,因此*v是顶点描述符 让我们使用Boost的degree函数-该函数还包含一个描述符: #incl

构建一个boost图,其中添加的边区域(如下)和v1定义为

gm->create_edge(v1,v2,1); 
boost::graph_traits<Graph>::vertex_descriptor v1 = gm-> create_vertex("one",1,1);
这很接近。

顶点(g)返回迭代器对。间接指向迭代器将得到描述符。在您自己的示例中,
v
顶点迭代器
,因此
*v
顶点描述符

让我们使用Boost的
degree
函数-该函数还包含一个描述符:

#include <boost/graph/adjacency_list.hpp>

namespace MyProgram {
    using namespace boost;
    struct VertexProps { int id; default_color_type color; };

    using Graph = adjacency_list<vecS, vecS, directedS, VertexProps>;

    Graph make_sample_graph();
}

#include <iostream>

int main() {
    using MyProgram::Graph;
    Graph g = MyProgram::make_sample_graph();

    Graph::vertex_iterator v, vend;
    for (boost::tie(v, vend) = vertices(g); v != vend; ++v) {
        std::cout << "Vertex descriptor #" << *v 
             << " degree:" << degree(*v, g)
             << " id:"     << g[*v].id
             << " color:"  << g[*v].color
             << "\n";
    }
}
for (auto vd : boost::make_iterator_range(vertices(g))) {
    std::cout << "Vertex descriptor #" << vd 
         << " degree:" << degree(vd, g)
         << " id:"     << g[vd].id
         << " color:"  << g[vd].color
         << "\n";
}
印刷品:

Vertex descriptor #0 degree:0 id:0 color:0
Vertex descriptor #1 degree:1 id:100 color:0
Vertex descriptor #2 degree:2 id:200 color:0
Vertex descriptor #3 degree:1 id:300 color:0
Vertex descriptor #4 degree:2 id:400 color:0
Vertex descriptor #5 degree:1 id:500 color:0
Vertex descriptor #6 degree:2 id:600 color:0
Vertex descriptor #7 degree:1 id:700 color:0
Vertex descriptor #8 degree:0 id:800 color:0
Vertex descriptor #9 degree:0 id:900 color:0
#include <boost/graph/adjacency_list.hpp>

namespace MyProgram {
    using namespace boost;
    struct VertexProps { int id; default_color_type color; };

    using Graph = adjacency_list<vecS, vecS, directedS, VertexProps>;

    Graph make_sample_graph();
}

#include <iostream>

int main() {
    using MyProgram::Graph;
    Graph g = MyProgram::make_sample_graph();

    Graph::vertex_iterator v, vend;
    for (boost::tie(v, vend) = vertices(g); v != vend; ++v) {
        std::cout << "Vertex descriptor #" << *v 
             << " degree:" << degree(*v, g)
             << " id:"     << g[*v].id
             << " color:"  << g[*v].color
             << "\n";
    }
}
for (auto vd : boost::make_iterator_range(vertices(g))) {
    std::cout << "Vertex descriptor #" << vd 
         << " degree:" << degree(vd, g)
         << " id:"     << g[vd].id
         << " color:"  << g[vd].color
         << "\n";
}
namespace MyProgram {
    Graph make_sample_graph() {
        Graph g(10);
        for (auto vd : boost::make_iterator_range(vertices(g)))
            g[vd] = { int(vd)*100, {} };

        add_edge(1,2,g);
        add_edge(2,3,g);
        add_edge(4,5,g);
        add_edge(4,6,g);
        add_edge(6,7,g);

        return g;
    }
}
Vertex descriptor #0 degree:0 id:0 color:0
Vertex descriptor #1 degree:1 id:100 color:0
Vertex descriptor #2 degree:2 id:200 color:0
Vertex descriptor #3 degree:1 id:300 color:0
Vertex descriptor #4 degree:2 id:400 color:0
Vertex descriptor #5 degree:1 id:500 color:0
Vertex descriptor #6 degree:2 id:600 color:0
Vertex descriptor #7 degree:1 id:700 color:0
Vertex descriptor #8 degree:0 id:800 color:0
Vertex descriptor #9 degree:0 id:900 color:0