gpt4 book ai didi

c++ - 通过键查找 Boost BGL 顶点

转载 作者:IT老高 更新时间:2023-10-28 12:39:33 25 4
gpt4 key购买 nike

我正在寻找一种通过使用键而不是顶点引用本身来访问顶点属性的方法。例如,如果我有

class Data
{
public:
std::string name;
unsigned int value;
};
typedef boost::adjacency_list< boost::vecS, boost::vecS, boost::directedS, Data > Graph;
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;

而不是使用

Vertex vertex1 = boost::add_vertex( g );
g[vertex1].name = "Alpha";
g[vertex1].value = 10;

我想要

g["Alpha"].name  = "Alpha";
g["Alpha"].value = 10;

是否存在即用型机制?

最佳答案

我想我已经找到了这样的机制。它被称为labeled_graph,是BGL 的一部分。可以使用预定义的包装器 labeled_graph,而不是使用 adjacency_list:

typedef boost::labeled_graph<
boost::adjacency_list< boost::vecS, boost::vecS, boost::directedS, Data >,
std::string
> Graph;

这样定义图后,可以通过以下方式访问顶点:

Graph g;

boost::add_vertex( "Alpha", g );
g["Alpha"].name = "Alpha";
g["Alpha"].value = 10;

boost::add_vertex( "Beta", g );
g["Beta"].name = "Beta";
g["Beta"].value = 20;

boost::add_edge_by_label( "Alpha", "Beta", g );

这样做的副作用是需要使用 graph() 成员函数来使某些算法起作用:

std::vector< Graph::vertex_descriptor > container;
boost::topological_sort( g.graph(), std::back_inserter( container ) ) ;

由于某种原因,labeled_graph 没有在 BGL 文档中描述,但它出现在示例文件夹中。

感谢您的回复,塞尔吉

关于c++ - 通过键查找 Boost BGL 顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2244580/

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