2010-06-14 1 views
10

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

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

+0

Это поможет, если мы увидим образец того, как выглядит ваша настраиваемая структура графика. –

ответ

5

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

+1

Я прочитал большинство документации BGL, что сайт имеет отношение к тому, чтобы заставить шаблоны работать. Однако, если вы не знакомы с LEDA, пример, который вы показываете, не является тривиальным и объясняется не очень хорошо. Если вы посмотрите на их код, он почти полностью лишен комментариев. Каждый фрагмент кода, который я нашел на сайте ускорителя, почти полностью лишен комментариев, а для объекта это общее, что довольно обескураживает. – Michael

+0

Это поможет, если вы укажете конкретные вещи, которые вы не поняли, или особенности, связанные с вашей структурой графика, которые затрудняют адаптацию. –

+0

справедливо, опубликует последнее редактирование сегодня – Michael

6

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

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

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

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

+2

Я только что закончил тестирование LEMON на графике с 1 миллионом узлов и 100 миллионами ребер; хорошо масштабируется без проблем с производительностью и т. д. –

+0

Спасибо за идею!К сожалению, я работаю с кодовой базой LARGE, и я не думаю, что мои боссы хотят иметь другую зависимость: S – Michael

+1

О, и приятно слышать, что я не единственный, кто думает, что BGL является чрезвычайно сложным и слишком общим и что примеры aren Это особенно показательно! – Michael

Смежные вопросы