Как создать named_graph с библиотекой Boost Graph?

В настоящее время я работаю с библиотекой Boost Graph. Мне нужны уникальные ребра и вершины. К сожалению, графики повышения не предоставляют эту функцию. Поэтому я должен проверять руководство каждый раз, прежде чем вставить ребро или вершину.

Теперь я нашел это: http://www.boost.org/doc/libs/1_49_0/boost/graph/named_graph.hpp Мне интересно, поможет ли это мне? Поскольку в документации ничего не говорится о named_graph, я не знаю, как его использовать. Может быть, есть кто-то рядом, кто мог бы дать мне небольшой пример или объяснение? Это мне очень поможет.

Заранее спасибо.


person user1387896    schedule 10.05.2012    source источник


Ответы (1)


Библиотека Boost Graph очень гибкая и позволяет вам выбирать внутреннее представление для ваших вершин и ребер. Если вы выберете контейнер, такой как std::set, вы можете напрямую применять уникальные вершины и ребра. Подробности здесь: Использование списка смежности

Тип named_graph позволяет вам индексировать ваши вершины по свойству, которое вы можете выбрать сами (например, «строка», представляющая имя). Он эффективно оборачивает стандартный список adjacency_list в карту, ключ которой является именованным свойством, а значениями являются узлы. Есть хороший пример того, как его использовать в источнике повышения named_vertices_test.cpp.

Не уверен, что вы пытаетесь сделать, но вы можете использовать std::map/std::set для сопоставления некоторого уникального свойства с узлами в adjacency_list. Если вам просто нужно убедиться, что граф имеет уникальные узлы/ребра, когда вы его создаете, то этот подход является прямым и простым и обычно является лучшим способом.

Вы должны подумать о последствиях замены поддерживаемых контейнеров на std::set — например, изменится производительность многих алгоритмов. Нет простого ответа на вопрос, какой контейнер лучше использовать.

person tcb    schedule 18.05.2012