質問

グラフのエッジを繰り返して、エッジの重みを出力しようとしています。私は混乱しています。 「エッジ」を出力する方法は知っていますが、これは実際にはエッジを定義する(頂点、頂点)に過ぎません。それで、vertex *edgepair.firstから始まるエッジの重量を取得するために、edgeweightmapに最初にインデックス *edgepair.firstをインデックスしますか?これは次のとおりです。「オペレーターに一致しません<<」。

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

typedef boost::property<boost::edge_weight_t, double> EdgeWeightProperty;
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, EdgeWeightProperty> Graph;

int main(int,char*[])
{
  // Create a graph object
  Graph g(2);

  EdgeWeightProperty e = 5;
  add_edge(0, 1, e, g);

  boost::property_map<Graph, boost::edge_weight_t>::type EdgeWeightMap = get(boost::edge_weight_t(), g);

  typedef boost::graph_traits<Graph>::edge_iterator edge_iter;
  std::pair<edge_iter, edge_iter> edgePair;
  for(edgePair = edges(g); edgePair.first != edgePair.second; ++edgePair.first)
  {
      std::cout << EdgeWeightMap[*edgePair.first] << " ";
  }

  return 0;
}

何かご意見は?

ありがとう、デビッド

役に立ちましたか?

解決

このコードでは、 EdgeWeightProperty エッジプロパティではなく頂点プロパティとして宣言されるため、そのプロパティにエッジを挿入することは意味がありません。追加してみてください boost::no_propertyEdgeWeightProperty あなたの中で adjacency_list typedef。また、使用することもできます get(EdgeWeightMap, *edgePair.first) それよりも operator[] より多くのプロパティマップタイプで動作するためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top