Я строю класс графа на основе следующего предложения: Изменение свойств вершин в Boost :: Graph
К сожалению, я понял неожиданное поведение. При использовании моих собственных свойств вершин (для простоты, пожалуйста, игнорируйте свойства ребер), встроенные свойства, похоже, не используются.
Так, например, когда у меня есть:
typedef adjacency_list<
setS, // disallow parallel edges
listS, // vertex container
undirectedS, // undirected graph
property<vertex_properties_t, VERTEXPROPERTIES>,
property<edge_properties_t, EDGEPROPERTIES>
> GraphContainer;
Я могу получить свои собственные свойства без проблем, но когда я хочу получить свойство vertex_index, я всегда получаю одно и то же значение для каждой вершины, что означает значение 0. Узлы различны, что подтверждается num_vertices MyGraph).
Тогда я подумал, что это может быть связано с отсутствием встроенных свойств, поэтому я попытался:
typedef adjacency_list<
setS, // disallow parallel edges
listS, // vertex container
undirectedS, // undirected graph
property<vertex_index_t, unsigned int , property< vertex_properties_t, VERTEXPROPERTIES> >,
property<edge_properties_t, EDGEPROPERTIES>
> GraphContainer;
Опять же, когда я хочу получить индекс любой вершины, я получаю значение 0.
Это нормальное поведение? Нужно ли также устанавливать встроенные свойства при использовании пользовательских свойств?