C++ 在OGDF中使用GraphCopy::initByCC维护GraphAttributes

C++ 在OGDF中使用GraphCopy::initByCC维护GraphAttributes,c++,gml-geographic-markup-lan,ogdf,C++,Gml Geographic Markup Lan,Ogdf,我试图使用OGDF对从GML文件加载的图形执行一些处理。只有在维护节点标签的情况下,这些图才有意义。不幸的是,OGDF并不能很容易地保留像标签这样的节点属性,因为它们是在一个名为GraphAttributes的单独数据结构中维护的。我的问题是GraphAttributes将节点标签与节点索引相关联,而我需要使用的一些图形转换并不维护节点索引 我需要对图形执行的转换之一是在GML文件中分割每个连接的子图形。加载图形及其节点标签很简单: ogdf::Graph graph; ogdf::GraphA

我试图使用OGDF对从GML文件加载的图形执行一些处理。只有在维护节点标签的情况下,这些图才有意义。不幸的是,OGDF并不能很容易地保留像标签这样的节点属性,因为它们是在一个名为
GraphAttributes
的单独数据结构中维护的。我的问题是
GraphAttributes
将节点标签与节点索引相关联,而我需要使用的一些图形转换并不维护节点索引

我需要对图形执行的转换之一是在GML文件中分割每个连接的子图形。加载图形及其节点标签很简单:

ogdf::Graph graph;
ogdf::GraphAttributes attributes(graph, ogdf::GraphAttributes::nodeLabel);
ogdf::GraphIO::readGML(attributes, graph, FILENAME);

// this gives the correct label of the first node in the graph
attributes.label(graph.firstNode());
类似地,OGDF提供了
CCsInfo
类来查找图的连通子图。由于我希望独立处理这些子图,因此我使用
GraphCopy::initByCC
方法创建单独的
Graph
实例

ogdf::CCsInfo info(graph);
ogdf::GraphCopy copy(graph);
ogdf::EdgeArray< ogdf::edge > edgeArray(graph);
// where i (int) is the number of the connected subgraph to copy
copy.initByCC(info, i, edgeArray);

// this now gives the wrong label for the first node in copy
attributes.label(copy.firstNode());
ogdf::CCsInfo信息(图形);
ogdf::图形副本(图形);
ogdf::EdgerRayEdgerRay(图形);
//其中i(int)是要复制的连接子图的编号
副本.initByCC(信息,i,EdgerRay);
//现在,这为副本中的第一个节点提供了错误的标签
attributes.label(copy.firstNode());
这是可行的,
copy
只包含连接子图的节点和边。但是,副本中节点的索引与原始图中节点的索引不同。这意味着标签到
属性
对象中节点的映射不适用于
复制
中的节点


有没有办法对
属性
对象执行相同的转换,以便我可以为复制的连接子图中的节点获得正确的标签?

事实证明,这并不像我想象的那样困难。我缺少的关键一点是,您可以使用
GraphCopy::original
方法从原始图形中获取具有索引的节点,然后使用该节点获取标签

// get the correct label for the first node of the GraphCopy object copy
attributes.label(copy.original(copy.firstNode()));
标记用于Game Maker语言,而不是地理标记语言。