gpt4 book ai didi

c++ - boost 图形库 : Bundled Properties and iterating across edges

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:12:50 26 4
gpt4 key购买 nike

只是想了解一下 Boost Graph Library,我有几个问题。我正在编写一些代码,它是 BGL 图的包装类。我的想法是,我可以随心所欲地操作图表,然后调用包装方法以 GEXF (XML) 格式输出图表。

我的代码是这样的:

struct Vertex {
std::string label;
...
};

struct Edge {
std::string label;
double weight;
...
};

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, Vertex, Edge> GraphType;

template <typename Graph>
class GEXF
{
private:
Graph graph;
...
};

template <typename Graph>
void GEXF<Graph>::buildXML()
{
...

// output the edges
property_map<adjacency_list<>, edge_index_t>::type edge_id = get(edge_index, graph);
GraphType::edge_iterator e, e_end;
for(tie(e, e_end) = edges(graph); e != e_end; ++e)
{
xmlpp::Element *edge = ePtr->add_child("edge");

// next line gives an error, property not found
edge->set_attribute("id", tostring<size_t>(get(edge_id, *e)));
edge->set_attribute("source", tostring<size_t>(source(*e, graph)));
edge->set_attribute("target", tostring<size_t>(target(*e, graph)));
}
}

...
// instantiate in main():
GEXF<GraphType> gexf;

这是我的问题:

  1. 当我使用捆绑属性时,我可以访问 vertex_index,但无法访问 edge_index。如何访问边缘索引?

  2. 在上面的代码中,我想保持 GEXF 类的通用性,但是当我尝试声明 Graph::edge_iterator e, e_end; 时遇到了问题上面的代码有效,但它使用的是具体类型。我应该如何一般地声明 edge_iterator?

最佳答案

boost::adjacency_list<...> 中默认没有 edge_index对象,因为维护一个会影响复杂性。您必须自己创建一个,但您必须小心确保它提供所需的功能。

以前:

Boost Subgraph and Bundled properties

edge_index zero for all edges?

Boost Graph edges with indexes

关于c++ - boost 图形库 : Bundled Properties and iterating across edges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7772400/

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