我有一个图表,我想将其类型更改为子图,以便能够将其划分为更多子图,以获得更多纵坐标打印图形。 问题是,当我将子图的适当性添加到我的图中时,顶点描述符不再有效。
修改前的代码:
#include "Node.cpp"
#include <boost/graph/adjacency_list.hpp>
#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/subgraph.hpp>
using namespace boost;
typedef adjacency_list<vecS, vecS, directedS, Node, property < edge_weight_t, float > > mygraph;
typedef graph_traits < mygraph >::vertex_descriptor vertex_descriptor;
...
将图表更改为子图后的代码:
#include "Node.cpp"
#include <boost/graph/adjacency_list.hpp>
#include <boost/property_map/property_map.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/subgraph.hpp>
using namespace boost;
typedef subgraph<adjacency_list<vecS, vecS, directedS, Node, property < edge_weight_t, float > > >mygraph;
typedef graph_traits < mygraph >::vertex_descriptor vertex_descriptor; //ERROR
...
有什么问题?我该如何解决?
答案 0 :(得分:3)
问题不在于特征本身。
子图需要一个edge_index属性,因为它存储了一个本地映射:
typedef std::map<edge_index_type, edge_descriptor> LocalEdgeMap;
LocalEdgeMap m_local_edge; // global -> local
由于没有edge_index_t
属性,因此地图的键类型评估为void
。
此处记录了这些内容:http://www.boost.org/doc/libs/1_55_0b1/libs/graph/doc/subgraph.html
底层图形类型需要具有vertex_index和edge_index内部属性,因此我们将边缘索引属性添加到邻接列表中。我们不需要添加顶点索引properety,因为它内置于adjacency_list中。我们将构建图1中的图形和子图,因此我们需要总共六个顶点
考虑添加边缘索引:
typedef subgraph<adjacency_list<vecS, vecS, directedS, Node, property < edge_index_t, index > > >mygraph;
typedef graph_traits < mygraph >::vertex_descriptor vertex_descriptor; // COMPILES