Использование пользовательских и встроенных свойств в Boost :: Graph - PullRequest
1 голос
/ 09 марта 2010

Я строю класс графа на основе следующего предложения: Изменение свойств вершин в 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. Это нормальное поведение? Нужно ли также устанавливать встроенные свойства при использовании пользовательских свойств?

1 Ответ

2 голосов
/ 09 марта 2010

Прошло много времени с тех пор, как я использовал Boost.Graph, но гуглил "vertex_index_t", в хите # 5 Эндрю Саттон говорит :

Просто объявив индекс вершины как свойство (связанное или внутреннее, как здесь) не купит вам никакой новой функциональности. Это просто место, где Вы можете назначить индекс для каждой вершины или ребра. Проблема в том, что это половина решает, что почти каждый алгоритм в дистрибутиве требует вершины карта индекса (или карта индекса края, реже), и предоставление этого позволит аргументы по умолчанию для автоматического извлечения карты свойств для вершины / ребра.

Это не будет - или не должно ??? автоматически назначать индексы. Кроме того, если вы удалите вершина или ребро, возможно, вам придется перенумеровать вершины.

Так что, похоже, идея состоит в том, чтобы стандартизировать концепцию между алгоритмами, которые хотят прочитать числа, но вам все равно придется самостоятельно писать .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...