gpt4 book ai didi

c++ - 修改来自访问者的捆绑属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:37:14 25 4
gpt4 key购买 nike

我应该如何从访问者内部修改顶点的捆绑属性?

我想使用下标图的简单方法,但传递给访问者的图参数是常量,因此编译器不允许更改。

我可以在访问者中存储对图表的引用,但这看起来很奇怪。

/**

A visitor which identifies vertices as leafs or trees

*/
class bfs_vis_leaf_finder:public default_bfs_visitor {

public:
/**

Constructor

@param[in] total reference to int variable to store total number of leaves
@param[in] g reference to graph ( used to modify bundled properties )

*/
bfs_vis_leaf_finder( int& total, graph_t& g ) :
myTotal( total ), myGraph( g )
{
myTotal = 0;
}

/**

Called when the search finds a new vertex

If the vertex has no children, it is a leaf and the total leaf count is incremented

*/
template <typename Vertex, typename Graph>
void discover_vertex( Vertex u, Graph& g)
{
if( out_edges( u, g ).first == out_edges( u, g ).second ) {
myTotal++;
//g[u].myLevel = s3d::cV::leaf;
myGraph[u].myLevel = s3d::cV::leaf;
} else {
//g[u].myLevel = s3d::cV::tree;
myGraph[u].myLevel = s3d::cV::tree;
}
}

int& myTotal;
graph_t& myGraph;
};

最佳答案

您的解决方案是正确的。

为了将图形类型与访问者分离,您可以只将有趣的属性映射传递给访问者构造函数,并使用 boost::get(property, u) = s3d::cV::leaf;。通过这种方式,您可以将任何类型兼容的顶点属性传递给访问者(访问者将更通用并且对图形类型中的名称更改不敏感)。

属性映射的类型将是访问者类的模板类型名称,类似于:

typedef property_map<graph_t, s3d_cv3_leaf_t your_vertex_info::*>::type your_property_map;

参见 here有关捆绑属性的完整论文。

HTH

关于c++ - 修改来自访问者的捆绑属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1510945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com