C ++ Boost图库 - Dijkstra示例

时间:2012-01-18 00:15:01

标签: c++ boost

我在boost graph library Dijkstra example的代码中遇到了一些问题。我改变它,以便我的版本不使用枚举和字母而不是整数。它抱怨for循环和tie函数,以及除第一个之外的其他tie调用。

Declerations:

  typedef std::pair<int, int> Edge;

  const int num_edges = num_edge;
  Edge edge_array[num_edges];
  int weights[num_edges];

  int size = 0;
  for(itora = edges.begin(); itora != edges.end(); ++itora){
    int u = *itora;
    ++itora;
    int v = *itora;
    ++itora;

    weights[size] = *itora;
    edge_array[size] = Edge(u,v);

    size++;
  }


  graph_traits<graph_t>::vertex_iterator i, iend;
  #if defined(BOOST_MSVC) && BOOST_MSVC <= 1300
  graph_t g(vertices.size());
  property_map<graph_t, edge_weight_t>::type weightmap = get(edge_weight, g); 

  std::vector<vertex_descriptor> msvc_vertices;
  for (boost::tie(i, iend) = vertices(g); i != iend; ++i){
    msvc_vertices.push_back(*i);
  }

  for (std::size_t j = 0; j < num_edges; ++j) {
    edge_descriptor e; bool inserted;
    boost::tie(e, inserted) = add_edge(msvc_vertices[edge_array[j].first], 
                                       msvc_vertices[edge_array[j].second], g); 
    weightmap[e] = weights[j];
  }

不破:

for (boost::tie(i, iend) = vertices(g); i != iend; ++i){
  msvc_vertices.push_back(*i);
}

这部分打破:

graph_traits<graph_t>::vertex_iterator xi, xiend;
for (boost::tie(xi, xiend) = vertices(g); xi != xiend; ++xi) {
  indexmap[*xi] = c;
  name[*xi] = '0' + c;
  c++;
}

这是错误:

x.cc: In function 'int main(int, char**)':
x.cc:141: error: no match for call to '(std::vector<int, std::allocator<int> >) (main(int, char**)::graph_t&)'
gmake: *** [x.o] Error 1

任何帮助都会非常感激,我真的不知道错误在抱怨...

1 个答案:

答案 0 :(得分:4)

您是否在未加引号的代码中的某处创建了局部变量std::vector<int> vertices