gpt4 book ai didi

c++ - 如何以 int 形式访问 BGL 的 vertex_descriptor

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:39 28 4
gpt4 key购买 nike

我有一个如下所示定义的邻接表。此时我需要访问 vertex_descriptor 作为 int 类型。我该怎么做 tvertex source = ...; int source_as_int = ???source??? 我记得以前遇到过同样的问题并解决了它,但不记得是如何解决的,而且 BGL 文档将其用作引用是无用的,他们应该尝试看看并从 Javadocs 中学习。

另一种可能性是使用 vertex_descriptor 类型的可能成员函数或为此目的使用一些全局 BGL 函数……人们永远不知道在哪里寻找它,它们似乎是随机的在制作全局函数或成员函数之间做出选择,如果你问我,这完全是一种直观设计的失败。

typedef adjacency_list_traits<setS, setS, bidirectionalS> ttraits;

typedef adjacency_list<setS, setS, bidirectionalS,
// vertex properties
property<vertex_color_t, default_color_type>,
// edge properties
property<edge_capacity_t, int,
property<edge_residual_capacity_t, int,
property<edge_reverse_t, ttraits::edge_descriptor> > >, no_property, vecS> tbgl_adjlist_bidir;

typedef graph_traits<tbgl_adjlist_bidir>::vertex_descriptor tvertex;
typedef graph_traits<tbgl_adjlist_bidir>::edge_descriptor tedge;
typedef property_map<tbgl_adjlist_bidir, edge_capacity_t>::type tedge_capacity_map;
typedef property_map<tbgl_adjlist_bidir, edge_reverse_t>::type treverse_edge_map;
typedef property_map<tbgl_adjlist_bidir, vertex_color_t>::type tvertex_color_map;
typedef graph_traits<tbgl_adjlist_bidir>::out_edge_iterator tout_edge_iterator;
typedef graph_traits<tbgl_adjlist_bidir>::in_edge_iterator tin_edge_iterator;

最佳答案

好吧,我明白了。添加顶点属性 vertex_index_t 解决了这个问题。然后我可以像这样访问顶点的 int 索引:

typedef adjacency_list_traits<setS, vecS, bidirectionalS> ttraits;

typedef adjacency_list<setS, vecS, bidirectionalS,
// vertex properties
property<vertex_index_t, int,
property<vertex_color_t, default_color_type> >,
// edge properties
property<edge_capacity_t, int,
property<edge_residual_capacity_t, int,
property<edge_reverse_t, ttraits::edge_descriptor> > >, no_property, vecS> tbgl_adjlist_bidir;

typedef graph_traits<tbgl_adjlist_bidir>::vertex_descriptor tvertex;
typedef graph_traits<tbgl_adjlist_bidir>::edge_descriptor tedge;
typedef property_map<tbgl_adjlist_bidir, edge_capacity_t>::type tedge_capacity_map;
typedef property_map<tbgl_adjlist_bidir, edge_reverse_t>::type treverse_edge_map;
typedef property_map<tbgl_adjlist_bidir, vertex_color_t>::type tvertex_color_map;
typedef property_map<tbgl_adjlist_bidir, vertex_index_t>::type tvertex_index_map;
typedef graph_traits<tbgl_adjlist_bidir>::vertex_iterator tvertex_iterator;
typedef graph_traits<tbgl_adjlist_bidir>::edge_iterator tedge_iterator;
typedef graph_traits<tbgl_adjlist_bidir>::out_edge_iterator tout_edge_iterator;
typedef graph_traits<tbgl_adjlist_bidir>::in_edge_iterator tin_edge_iterator;

然后我这样使用它:

    tbgl_adjlist_bidir bgl_adjlist_bidir;
// ...
tvertex_index_map indices = get(vertex_index, bgl_adjlist_bidir);
// ...
tvertex source;
// ...
int source_as_int = indices[source];

关于c++ - 如何以 int 形式访问 BGL 的 vertex_descriptor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11581245/

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