我正在使用C++ graph library KOALA计算图形的最小割线。
这是我正在使用的示例-example。它只是创建一个在边缘具有容量的图形并计算最小切割。
我的问题与这条线有关:
Flow::minEdgeCut(g, cap, s, t, Flow::outCut(blackHole, edgeIter()));
这是document for the arguments of the function。
它说它返回最小切割所经过的边缘。它立即用
std::cout
打印边缘,但是稍后我需要在程序中访问它们。我的问题是如何访问它们存储的数据结构,例如在以后打印它们。该示例将
stuct edgeIter
作为参数传递给outCut
。 edgeIter
提供3个重载运算符。我是否需要为此结构添加其他成员?struct edgeIter {
void operator=(MyGraph::PEdge e) { cout << e->info; }
void operator++() { }
edgeIter &operator*() { return *this; }
};
这也是
outcut
方法的定义。/** \brief Auxiliary class to represent the edge cut. (output structure) */
template< class VIter, class EIter > struct OutCut
{
VIter vertIter;/**<\brief Insert iterator to the container with vertexes (accessible from starting vertex after the cut)*/
EIter edgeIter;/**<\brief Insert iterator to the container with edges of the cat.*/
/**\brief Constructor*/
OutCut( VIter av, EIter ei ): vertIter( av ), edgeIter( ei ) { }
};
/**\brief Generating function for the OutCut object.
*
* \tparam VIter the type of insert iterator to container with vertices.
* \tparam EIter the type of insert iterator to container with edges.
* \param av the insert iterator to container with vertices.
* \tparam ei the insert iterator to container with edges.
*
* [See example](examples/flow/example_Flow.html). */
template< class VIter, class EIter > static OutCut< VIter,EIter > outCut( VIter av, EIter ei )
{ return OutCut< VIter,EIter >( av,ei ); }
最佳答案
edgeIter
是 OutputIterator
的实例。您可以修改代码以使用 std::back_inserter
并将所有结果收集在 vector edges
中,如下所示:
std::vector<MyGraph::PEdge> edges;
Flow::minEdgeCut(g, cap, s, t, Flow::outCut(blackHole, std::back_inserter(edges)));
还有一个
front_inserter
,或者您可以编写一个像edgeIter
这样的自定义实现。关于c++ - C++ KOALA图形库-了解访问数据结构的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55237766/