gpt4 book ai didi

c++ - 使用 write_graphviz() 打印一个 constified 子图

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:19 25 4
gpt4 key购买 nike

我正在努力将图表转储到流中,其中所述图表是 boost::subgraph 的简化版本。

我尝试提供一个 property writer但基本上它失败了,因为它似乎需要一个方法 boost::get(PropertyWriter, VertexDescriptor)。使用相同的方法,在图表不是 subgraph 的情况下按预期工作。

作为found here ,我必须使用 boost::dynamic_properties(见下面的代码),但是当我的图表不可写时它失败了(而 the documentation 表示该图表被视为一个简化的引用)。

这是一个我无法开始工作的简单示例:

#include <boost/graph/graph_traits.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <boost/graph/subgraph.hpp>

struct VertexProperties
{
std::string name;
};

int main()
{
typedef boost::subgraph<
boost::adjacency_list<
boost::vecS, boost::vecS,
boost::directedS,
boost::property<boost::vertex_index_t, std::size_t, VertexProperties>,
boost::property<boost::edge_index_t, std::size_t> > > Graph;

Graph const g;

boost::dynamic_properties dp;
dp.property("name", boost::get(&VertexProperties::name, g));
dp.property("node_id", boost::get(boost::vertex_index, g));
boost::write_graphviz_dp(std::cout, g, dp);
}

欢迎任何提示!非常感谢,


编辑

我忘了提及“失败”在我的案例中意味着什么;这是我尝试编译时的错误:

error: passing ‘const std::basic_string’ as ‘this’ argument of ‘std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char, _Traits = std::char_traits, _Alloc = std::allocator, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string]’ discards qualifiers [-fpermissive]

最佳答案

按照建议,我报告这是 Boost.Graph ( see the ticket ) 中的错误。

作为一种解决方法,似乎可以使用底层图而不是子图,方法是访问公共(public)范围内的成员 m_graph

以下是我如何与属性(property)作家一起解决这个问题:

struct VertexProperties
{
std::string name;
};

template <typename Graph> struct prop_writer
{
prop_writer(Graph const& g): g_(g) {}

template <typename Vertex> void operator()(std::ostream& out, Vertex v) const
{
out << g_[v].name;
}

Graph const& g_;
}

typedef boost::subgraph<
boost::adjacency_list<
boost::vecS, boost::vecS,
boost::directedS,
boost::property<boost::vertex_index_t, std::size_t, VertexProperties>,
boost::property<boost::edge_index_t, std::size_t> > > Graph;

Graph const g;

// Note the use of g.m_graph here.
boost::write_graphviz(std::cout, g.m_graph, prop_writer<Graph>(g));

关于c++ - 使用 write_graphviz() 打印一个 constified 子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9669109/

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