2

次のコードにはエラーがあります。

「std::basic_ostream」左辺値を「std::basic_ostream&&」にバインドできません

#include <boost/graph/graphviz.hpp>
void foo(int,char*[])
{
  using namespace boost;

  typedef boost::adjacency_list<
      boost::setS, // outedge list
      boost::setS, // vertex list
      boost::directedS, // undirected 
      boost::no_property, // vertex prop
      boost::no_property, // edge prop
      boost::no_property, // graph prop
      boost::setS // edgelistc
      > Graph;
  Graph g;

  std::ostringstream dotname;
  dotname << "a.dot";
  std::ofstream dot(dotname.str());

  write_graphviz(dot, g);
}

boost::vecS、//頂点リストのときに機能します

それは期待されていますか?

4

1 に答える 1

2

頂点コンテナー セレクターをsetS変更して、頂点記述子をストリーミングできないタイプに変更します。

BGL の他の多くのアルゴリズムと同様に、別の頂点インデックスを渡す必要があります。

の:VertexAndEdgeListGraph& g

有向グラフまたは無向グラフ。グラフのタイプは のモデルでなければなりません VertexAndEdgeListGraph。ほとんどの場合、グラフには内部 vertex_indexプロパティ マップが必要です。

外部頂点 ID マッピング

Live On Coliru

#include <boost/graph/graphviz.hpp>
#include <boost/graph/random.hpp>
#include <random>

int main(int,char*[])
{
    using namespace boost;

    typedef boost::adjacency_list<setS, setS, directedS> Graph;
    Graph g;

    std::mt19937 prng{std::random_device{}()};
    generate_random_graph(g, 3, 5, prng);

    std::map<Graph::vertex_descriptor, size_t> ids;

    for (auto u : make_iterator_range(vertices(g)))
        ids[u] = ids.size();

    default_writer w;

    write_graphviz(std::cout, g, w, w, w, make_assoc_property_map(ids));
}

プリントなど

digraph G {
1;
2;
3;
1->2 ;
2->1 ;
2->3 ;
3->1 ;
3->2 ;
}

内部プロパティ マップ:

あまり変更せずにプロパティを内部に配置できます。

Live On Coliru

#include <boost/graph/graphviz.hpp>
#include <boost/graph/random.hpp>
#include <random>

int main(int,char*[])
{
    using namespace boost;

    typedef boost::adjacency_list<setS, setS, directedS, property<vertex_index_t, size_t> > Graph;
    Graph g;

    std::mt19937 prng{std::random_device{}()};
    generate_random_graph(g, 3, 5, prng);

    auto ids = get(vertex_index, g);
    size_t num = 0;
    for (auto u : make_iterator_range(vertices(g)))
        put(ids, u, num++);

    write_graphviz(std::cout, g);
}
于 2015-06-06T21:00:57.213 に答える