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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

Пример находится в документации 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