Boost Subgraph Copy Constructor 不适用于 Qt 5.0.2 和 MinGW
Posted
技术标签:
【中文标题】Boost Subgraph Copy Constructor 不适用于 Qt 5.0.2 和 MinGW【英文标题】:Boost Subgraph Copy Constructor not working with Qt 5.0.2 and MinGW 【发布时间】:2013-11-28 10:39:21 【问题描述】:我在我的项目中使用 Qt 4.8 和带有 boost 1.46.0 的 minGW 编译器,但现在我已经转移到带有 Boost 1.55.0 的 Qt 5.0.2 和 MinGW 编译器,但是子图的复制构造函数不能正常工作。它没有向子图添加顶点(如果执行调试,则在顶点列表中显示 0 个项目)。
typedef boost::adjacency_list< boost::listS,
boost::vecS,
boost::bidirectionalS,
boost::property<boost::vertex_index_t, int ,
property<vertex_position_t, point, VertexProperties> > ,
boost::property<boost::edge_index_t,int , EdgeProperties>,
boost::property<graph_custom_prop_t,Graphproperties> >
Graph;
typedef boost::subgraph< Graph > SubGraph;
我正在将输入输入 gMainGraph,我需要将其复制到 m_gMainGraph
SubGraph* m_gMainGraph;
m_gMainGraph = new SubGraph(gMainGraph);
正在创建子图,但未创建子图中的顶点和边,并且仅将其添加到最顶层的父图中。 在上面的代码中,gMainGraph 没有被深度复制到 m_gMainGraph。
【问题讨论】:
【参考方案1】:这是解决此问题的一些方法,因为在 boost 1_55_0 中没有实现子图复制构造函数来执行深度复制。 我尝试更新 boost subgraph 复制构造函数。只需在您的 boost 的 subgraph.hpp 文件中使用以下代码。您需要注释 1.52.0 中的一些代码并使用以下更改。
// copy constructor
/*Updated the copy constructor to work properly
As it's working in 1.46.0 and not in 1.52.0, In 1.52.0, the subgraph constructor is not itrating the child of child subgraphs
So only the direct children of main subgraph was getting copied*/
subgraph(const subgraph& x)
: m_graph(x.m_graph), m_parent(x.m_parent), m_edge_counter(x.m_edge_counter) //Added m_graph(x.m_graph)
, m_global_vertex(x.m_global_vertex), m_global_edge(x.m_global_edge)
// This loop belongs to 1.46.0
for(typename ChildrenList::const_iterator i = x.m_children.begin();
i != x.m_children.end(); ++i)
m_children.push_back(new subgraph<Graph>( **i ));
/* 1.52.0 code*/
// if(x.is_root())
//
// m_graph = x.m_graph;
//
// // Do a deep copy (recursive).
// // Only the root graph is copied, the subgraphs contain
// // only references to the global vertices they own.
// typename subgraph<Graph>::children_iterator i,i_end;
// boost::tie(i,i_end) = x.children();
// for(; i != i_end; ++i)
//
// subgraph<Graph> child = this->create_subgraph();
// child = *i;
// vertex_iterator vi,vi_end;
// boost::tie(vi,vi_end) = vertices(*i);
// for (;vi!=vi_end;++vi)
//
// add_vertex(*vi,child);
//
//
【讨论】:
以上是关于Boost Subgraph Copy Constructor 不适用于 Qt 5.0.2 和 MinGW的主要内容,如果未能解决你的问题,请参考以下文章
错误:'boost::filesystem::path::filename() const() + "/"' 中的'operator+' 不匹配
C ++ BOOST对`boost :: filesystem :: detail :: copy_file的未定义引用