Нужна помощь по расширению adjacency_list - PullRequest
2 голосов
/ 04 марта 2009

Я пытаюсь использовать тип смежности Boost и у меня возникают проблемы с пониманием документации .

Скажем, я определяю класс с именем 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);

но, конечно, это не работает. Пожалуйста, помогите!

Edit:
Вот пример почти того, что мне нужно.

1 Ответ

3 голосов
/ 04 марта 2009

Читая на 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 .

...