Как соответствовать настраиваемому графику к шаблону библиотеки графика повышения?

Я ржав на шаблонах C++, и я пользуюсь библиотекой графика повышения (фатальная комбинация). Я искал сеть и не могу найти прямые инструкции относительно того, как взять структуру настраиваемого графика и соответствовать достаточному количеству ее к BGL (библиотека графика повышения), что я могу использовать алгоритмы пересекающего графика повышений. Кто-либо достаточно знакомый с библиотекой для выручения меня?

Править: Так, основная проблема, которую я имел, состоит в том, где найти, что источник где общие требования отображает произвольный график на график BGL. Я действительно плохо знаком с шаблонами, таким образом, мне трудно считать спецификацию/примеры BGL. Возможно, я должен искать общий источник на шаблонах?

10
задан Michael 16 June 2010 в 14:20
поделиться

2 ответа

Подход, как я его понимаю, заключается в специализации структуры boost::graph_traits для вашего типа графа. Это настраивает BGL на различные важные свойства, которые он должен знать о вашем графе. Затем вы специализируете глобальные шаблонные функции для специализированного типа вашего графа graph_traits, чтобы реализовать любые интерфейсы boost graph, которые могут быть применимы к вашему конкретному типу графа.

Пример можно найти в документации BGL:

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/leda_conversion.html

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

http://www.boost.org/doc/libs/1_43_0/libs/graph/doc/graph_concepts.html

5
ответ дан 4 December 2019 в 01:00
поделиться

Мое предложение - полностью отказаться от использования BGL, если только у вас уже нет значительного количества кода, написанного поверх него. Недавно я тестировал его для будущего использования в большом проекте по анализу графов и обнаружил, что он практически непригоден для использования из-за слишком сложного и плохо разработанного API.

В BGL нет простых задач, только сложные, и я постоянно боролся с компилятором из-за чрезмерно сложной иерархии шаблонов, которую имеет BGL. Малое количество полезной документации (по крайней мере, не там, где она действительно нужна) и недостаточное количество примеров только усугубляют ситуацию. Это не способ писать код.

Я бы рекомендовал перейти на LEMON. Он стабилен, написан на C++, прост в понимании и коде, предлагает несколько специализированных форм графов для поддержки различных потребностей использования, и поддерживает функции поиска/визора как BFS, так и DFS. Он также имеет свой собственный эквивалент карт свойств для узлов/ребер, так что вы должны быть в состоянии вписать в него свою собственную структуру графа и другие данные.

Попробуйте LEMON; он намного вкуснее и вызывает меньше язв. ;-)

.
6
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: