Требуется помощь Boost adjacency_list
-
03-07-2019 - |
Вопрос
Я пытаюсь использовать тип Boost adjacency_list, и у меня возникают проблемы с пониманием Документация.
Допустим, я определяю класс с именем State и создаю по одному экземпляру для каждого штата в США:
class State { ... };
State california, oregon, nevada, arizona, hawaii, ...
Я хочу ввести их в boost::adjacency_list вершины - это состояния, а ребра - границы.Для состояний, которые я перечислил выше, я думаю, что на графике будут эти данные:
california : oregon, nevada, arizona
hawaii :
oregon : california, nevada
nevada : oregon, california, arizona
arizona : california, nevada
Я понимаю, как помещать целые числа в график, и я рассматривал возможность просто создать массив состояний и вставить их индекс массива в график, но, похоже, я должен быть в состоянии просто сказать:
add_edge(california, oregon, graph);
но, конечно, это не работает.Пожалуйста, помогите!
Редактировать:
Вот пример почти именно того, что мне нужно.
Решение
Читая boost::adjacency_list, кажется, что вы должны использовать свойства для вершин, а не что-то вроде класса:
struct VertexProperties {
std::string stateName;
};
typedef adjacency_list<listS, listS, bidirectionalS, VertexProperties> Graph;
Graph adjacentStates(50);
property_map<Graph, std::string VertexProperties::*>::type
stateName = get(&VertexProperties::stateName, adjacentStates);
add_edge(vertex("california", adjacentStates), vertex("oregon", adjacentStates), adjacentStates);
(Плохо) адаптированный из пример в boost.