C++ 如何使用Boost图形库获取边缘的端口标识符?

C++ 如何使用Boost图形库获取边缘的端口标识符?,c++,boost,graphviz,boost-graph,C++,Boost,Graphviz,Boost Graph,使用Boost图形库,是否可以获取边缘的端口标识符 示例:调用read_graphviz后,我可以遍历此图的边缘并打印它们的节点ids——我得到“A->B,A->B”。如何打印“A:p0->B:p1,A:p0->B:p2”之类的内容 有向图G{ A[label=“A | p0”]; B[label=“B | p1 | p2”]; A:p0->B:p1; A:p0->B:p2; } 从读取新的.hpp图形来源: struct edge_info { node_and_port source;

使用Boost图形库,是否可以获取边缘的端口标识符

示例:调用
read_graphviz
后,我可以遍历此图的边缘并打印它们的
节点id
s——我得到“A->B,A->B”。如何打印“A:p0->B:p1,A:p0->B:p2”之类的内容

有向图G{
A[label=“A | p0”];
B[label=“B | p1 | p2”];
A:p0->B:p1;
A:p0->B:p2;
}

读取新的.hpp图形
来源:

struct edge_info {
  node_and_port source;
  node_and_port target;
  properties props;
};
其中,
节点和端口
如下所示:

struct node_and_port {
  node_name name;
  std::string angle; // Or empty if no angle
  std::vector<std::string> location; // Up to two identifiers
  // ...
}
在名称空间
boost::read_graphviz_detail
。如果直接使用
read_graphviz
,也可以在
dynamic_property_map
中找到它;它在内部指的是
read\u graphviz\u new


注意:
graphviz.hpp
中,根据
#ifdef
选择两个graphviz解析器中的一个:

#ifdef BOOST_GRAPH_USE_SPIRIT_PARSER
  return read_graphviz_spirit(data.begin(), data.end(), graph, dp, node_id);
#else // Non-Spirit parser
  return read_graphviz_new(data,graph,dp,node_id);
#endif
如果我读对了,那么非精神解析器就是您想要的解析器;基于spirit的一个看起来好像忽略了端口


无论如何,这只是基于快速查看boost v的源代码。1.44; 对我来说,感兴趣的代码存在于
/usr/include/boost/graph/detail/read_graphviz_new.hpp
。我没有测试过这个,但是看起来所有的管道都在那里

谢谢,成功了。为了澄清,您将
parser\u结果
传递给
parse\u graphviz\u from\u string
,对于其
edges
向量中的每个
edges\u信息
,您可以查看每个
节点和
端口的
位置
字段。为了澄清,我们无法从
read\u graphviz
获取端口信息。在函数“将结果转换为图形”中,仅将
ei.source.name
ei.target.name
复制到返回的图形中。
 void parse_graphviz_from_string(const std::string& str, parser_result& result, bool want_directed);
#ifdef BOOST_GRAPH_USE_SPIRIT_PARSER
  return read_graphviz_spirit(data.begin(), data.end(), graph, dp, node_id);
#else // Non-Spirit parser
  return read_graphviz_new(data,graph,dp,node_id);
#endif