Топологическая сортировка с использованием Boost :: topological_sort - PullRequest
0 голосов
/ 23 декабря 2011

Я пытаюсь использовать топологическую функцию повышения.

Я использую boost :: adjacency_list с setS и listS в качестве основного хранилища для ребер и вершин.

typedef boost::adjacency_list<boost::setS, boost::listS, boost::bidirectionalS > SizerGraph;  
    SizerGraph sizerGraph;  
    typedef boost::graph_traits<SizerGraph>::vertex_descriptor Vertex;  
    boost::topological_sort(sizerGraph, std::ostream_iterator<Vertex>(std::cout, "\n"));

Компиляция приводит к ошибкам. (g ++ 3.4.6)

/ usr / include / boost / property_map.hpp: 349: ошибка: нет соответствия для 'оператор +' в '((const boost :: iterator_property_map <__ gnu_cxx :: __ normal_iterator>>, повышение :: adj_list_vertex_property_map, boost :: detail :: error_property_not_found, const boost :: detail :: error_property_not_found &, boost :: vertex_index_t>, повышение :: default_color_type, boost :: default_color_type &> *) this) -> boost :: iterator_property_map <__ gnu_cxx :: __ normal_iterator>>, повышение :: adj_list_vertex_property_map, boost :: detail :: error_property_not_found, const boost :: detail :: error_property_not_found &, boost :: vertex_index_t>, boost :: default_color_type, boost :: default_color_type &> :: iter + boost :: get [with PropertyMap = повышение :: adj_list_vertex_property_map, boost :: detail :: error_property_not_found, const boost :: detail :: error_property_not_found &, boost :: vertex_index_t>, Ссылка = const boost :: detail :: error_property_not_found &, K = void *] (((const boost :: put_get_helper, boost :: detail :: error_property_not_found, const boost :: detail :: error_property_not_found &, boost :: vertex_index_t>

&) ((const boost :: put_get_helper, boost :: detail :: error_property_not_found, const boost :: detail :: error_property_not_found &, boost :: vertex_index_t> *) (((const boost :: adj_list_vertex_property_map, boost :: detail :: error_property_not_found, const повышение :: детали :: error_property_not_found и, повышение :: vertex_index_t> *) ((Const boost :: iterator_property_map <__ gnu_cxx :: __ normal_iterator>>, повышение :: adj_list_vertex_property_map, boost :: detail :: error_property_not_found, const boost :: detail :: error_property_not_found &, boost :: vertex_index_t>, boost :: default_color_type, boost :: default_color_type &> ) this)) + 8u))), ((void const &) ((void * const *) (& v)))) '

/ usr / include / boost / graph / detail / adjacency_list.hpp: 2264: ошибка: нет функция сопоставления для вызова `get_property_value (boost :: no_property &, повышение :: vertex_index_t)

Однако с использованием vecS в качестве основного механизма хранения для вершин приводит к чистой компиляции.

Мое использование списков для вершин нарушает какое-либо требование к понятию?

1 Ответ

0 голосов
/ 24 декабря 2011

Это всего лишь предположение, но появляется сообщение об ошибке:

Нет совпадения с оператором + в бла .. итератор ..

Когда вы используетеVecS, вы получаете вектор - итераторы которого имеют произвольный доступ, и оператор поддержки +

Когда вы используете ListS, вы получаете список - чьи итераторы являются двунаправленными и не поддерживают оператор +

...