Почему я не могу использовать график наддува write_graphviz с OutEdgeList = listS и VertexList = listS - PullRequest
5 голосов
/ 25 апреля 2011

Почему я не могу скомпилировать следующее простое приложение.Если я изменяю listS на vecS, все работает нормально.(Я использую boost 1.46.1 и gcc 4.4.5)

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

int main(int argc, const char *argv[]) {
    boost::adjacency_list< boost::listS, boost::listS, boost::bidirectionalS > g;

    boost::write_graphviz(std::cout, g);

    return 0;
}

1 Ответ

6 голосов
/ 26 апреля 2011

write_graphviz требуется свойство vertex_id для отображения меток идентификатора вершины. adjacency_list, который использует listS в качестве контейнера вершин, автоматически не предоставляет это свойство vertex_id. Такое поведение имеет смысл, поскольку в связанном списке нет такой вещи, как ключ или индекс, который можно использовать для уникальной идентификации элемента. Помните, что связанный список не является ни последовательностью произвольного доступа, ни ассоциативным контейнером.

Вам нужно будет либо указать свой собственный получатель свойства vertex_id, либо использовать контейнер вершин, которому присуще свойство vertex_id.

...