読者です 読者をやめる 読者になる 読者になる

Boost.Graph vertex_descriptorからvertexを取得する

C++

これが今やってる作業で必要になるかどうかはまだわからないのですが、方法を調べていました。
グラフ型オブジェクトから直接取得できる頂点は、頂点の値ではなく、vertex_descriptorという頂点の値もしくは頂点を表すポインタになります。
そのvertex_descriptorから頂点の値を取得するにはどうすればいいのかを調べました。

どうやら、vertex_indexプロパティで取得すればいいようです。

#include <iostream>
#include <map>
#include <boost/graph/adjacency_list.hpp>

typedef boost::adjacency_list<> Graph;
typedef std::pair<int, int> Edge;

enum { A, B, C, D, E, N };

int main()
{
    Graph g;

    // 頂点を追加
    std::map<int, Graph::vertex_descriptor> desc;
    for (int i = 0; i < N; ++i) {
        desc[i] = add_vertex(g);
    }

    int v = boost::get(boost::vertex_index, g, desc[0]);
    std::cout << v << std::endl;
}
0

add_vertex()では頂点の値は指定できないので、単に生成した順番が頂点の値になります。頂点の名前としてenumを定義していますが、ここでは使用していません。
vertex_indexプロパティを、グラフオブジェクトとvertex_descriptorを指定して取得すれば、頂点のインデックスが返されます。