C++ 在自定义图形类型上使用boost::push_-relabel算法

C++ 在自定义图形类型上使用boost::push_-relabel算法,c++,boost-graph,C++,Boost Graph,我的图表有以下声明 struct vertex_info { std::string name; std::string label; unsigned int type; bool isND; }; struct edge_info { std::string name; long capacity; long residualCapacity; long rev; }; typedef boost::adjacency_list<boo

我的图表有以下声明

struct vertex_info 
{
  std::string name;
  std::string label;    
  unsigned int type;
  bool isND; 
};

struct edge_info 
{
  std::string name;
  long capacity;
  long residualCapacity;
  long rev;
};

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS
  , vertex_info, edge_info > expr_graph_t;
编译器(g++)正在生成长错误消息()。我怀疑我无法向函数传递正确类型的映射。函数签名可用


文件中给出了许多示例,但它们使用的图形与我的不同。我无法更改图形声明,否则许多代码将中断。我不习惯推广
属性映射
概念

此解决方案是由于llonesmiz


问题是,
reverse\u-edge\u-map
需要一个属性映射,该属性映射的键类型=
edge\u-descriptor
和值类型=
edge\u-descriptor
,我使用的属性映射的值类型=
long
。我声明
rev
邻接列表\特征::边缘\描述符
。它认为我生成了一个seg错误,我认为这是函数逻辑的问题,而不是函数原型的问题。

一个问题(可能是问题)是
reverse\u edge\u map
需要一个带有key\u type=edge\u描述符和value\u type=edge\u描述符的属性映射,而您使用的属性映射具有value\u type=long。您可以使用
邻接列表\u traits::edge\u descriptor
来声明您的
rev
。如果你添加一个简单的示例图,我可以试着让它工作。谢谢你。有事情发生了。如果我不能解决这个问题,我会创建一个小例子,让你知道。@llonesmiz,你救了我一天。谢天谢地。请加上这个作为答案,我会接受的。再次感谢。:-)是一个使用的示例。
  push_relabel_max_flow(flowG, source, sink
      , get(&edge_info::capacity, flowG)
      , get(&edge_info::residualCapacity, flowG)
      , get(&edge_info::rev, flowG)
      , get(boost::vertex_index, flowG)
      );