Повышение пользовательских меток вершин graphviz

В настоящее время у меня есть следующий код для проекта, который представляет некоторые деревья вероятностей и использует пользовательские структуры для типов вершин и ребер:

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

struct Vertex{
    std::string name;
    size_t times_visited;
    float value;
    bool terminal_node;
    bool root_node;
};

struct Edge{
    float probability;
};

//Some typedefs for simplicity
typedef boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, Vertex, Edge> directed_graph_t;

typedef boost::graph_traits<directed_graph_t>::vertex_descriptor vertex_t;
typedef boost::graph_traits<directed_graph_t>::edge_descriptor edge_t;

В настоящее время у меня есть простое визуальное представление некоторых простых деревьев с использованием графической визуализации, но без меток. Я хотел бы, чтобы связи между вершинами были помечены вероятностью, найденной в структуре Edge, и вершинами, помеченными ассоциативным именем, найденным в структуре Vertex. Моя первая попытка сделать это состояла в том, чтобы использовать этот код:

std::ofstream outf("test.dot");
boost::dynamic_properties dp;
dp.property("name", get(&Vertex::name, test));
dp.property("node_id", get(boost::vertex_index, test));
write_graphviz_dp(outf, test, dp);

Но это, кажется, не делает то, что я хочу, поскольку не выводит имя вершины. Что я должен изменить здесь?


person shuttle87    schedule 08.11.2011    source источник


Ответы (1)


Похоже, это было только потому, что я не понимал графвиз должным образом. Следующий код работал, как и ожидалось:

std::ofstream outf("test.dot");
boost::dynamic_properties dp;
dp.property("label", boost::get(&Vertex::name, test));
dp.property("node_id", boost::get(boost::vertex_index, test));
dp.property("label", boost::get(&Edge::probability, test));
write_graphviz_dp(outf, test, dp);
person shuttle87    schedule 09.11.2011