График BGL с картой в списке ребер

Я пытаюсь создать какую-то конкретную структуру с помощью Boost Graph Library.
Мне нужно иметь узлы (вершины) с портами ввода и вывода. Каждый выходной порт может быть подключен к любому входному порту другого узла. Я хочу иметь возможность проверить, подключен ли конкретный выходной или входной порт к любому другому порту.

Идея состоит в том, чтобы использовать std :: map в качестве OutEdgeList внутри adjacency_list.

В соответствии с: http://www.boost.org/doc/libs/1_52_0/libs/graph/doc/using_adjacency_list.html#sec:choosing-graph-type
Я могу выбрать только один из std :: vector, std :: list, std :: slist, std :: set, std :: multiset и std :: hash_set.
(вы можете выбрать mapS как тип, но он реализован как std :: set, и я не могу получить значение по ключу)

И у меня есть пара вопросов:

  1. Можно ли использовать std :: map? Если да, то как?
  2. Как я могу перебрать входные данные вершины при использовании std :: map?
  3. Если вышесказанное невозможно, как я могу реализовать структуры, которые
    устраивает проблему?

Спасибо!

2

Решение

Я наконец перешел на Библиотека графов лимонов который не такой хакерский, как BGL

2

Другие решения

Я не вижу причин, почему карту нельзя использовать как структуру данных для хранения исходящих ребер. Карта имеет итераторы, которые работают аналогичным образом, чтобы сказать std::vectorи т. д. Для обработки входящих ребер вам понадобятся 2 карты на каждую вершину. AFAIK BGL поддерживает оба списка на вершинах.

Я бы порекомендовал вам модифицировать (взломать) BGL и посмотреть, что будет. Изменение может быть не маленьким. Вы должны будете предоставить специализации adjacency_list для вашего нового типа контейнера. Скорее всего, это будет работать.

0

По вопросам рекламы [email protected]