читать точечный файл для graphviz без сохранения идентификатора узла в графе повышения

У меня есть файл с именем "test.dot", например,

graph {
    0;
    1;
    0 -- 1;
}
//EOF

Я хочу прочитать файл, используя библиотеку графов повышения.

#include <boost/graph/graphviz.hpp>

using namespace std;
using namespace boost;

int main(int,char*[])
{
    typedef adjacency_list< vecS, vecS, undirectedS, property<vertex_color_t,int> > Graph;
    Graph g(0);

    dynamic_properties dp;
    auto index = get(vertex_color, g);
    dp.property("node_id", index);

    ifstream fin("test.dot");
    read_graphviz(fin, g, dp);
}

Однако в этом исходном коде мне пришлось добавить еще одно свойство (vertex_color_t) для хранения «node_id». В моем простом примере это то же самое, что и «node_index».

Есть ли способ, которым я могу идентифицировать их, чтобы сохранить память?? Я не хочу вводить дополнительное свойство.


person Sungmin    schedule 30.11.2012    source источник
comment
Где node_index в коде? Достаточно ли просто изменить имя свойства node_id (см. документацию по read_graphviz, как это сделать)?   -  person Jeremiah Willcock    schedule 27.10.2013


Ответы (1)


dynamic_properties имеет конструктор, который принимает функтор для обработки случая по умолчанию, одна реализация - boost::ignore_other_properties. Это работает:

#include <boost/graph/graphviz.hpp>

using namespace std;
using namespace boost;

int main(int,char*[])
{
    typedef adjacency_list< vecS, vecS, undirectedS > Graph;
    Graph g(0);

    dynamic_properties dp(ignore_other_properties);
    ifstream fin("test.dot");
    read_graphviz(fin, g, dp);
}
person pascal    schedule 11.08.2014