Augmenter l'aide de adjacency_list nécessaire
-
03-07-2019 - |
Question
J'essaie d'utiliser le type adjacency_list de Boost et j'ai des difficultés à comprendre le documentation .
Disons que je définis une classe nommée State et que j'instancie une instance pour chaque état américain:
class State { ... };
State california, oregon, nevada, arizona, hawaii, ...
Je veux les entrer dans un boost :: adjacency_list les sommets sont des états et les bords sont des bordures. Pour les états que j'ai énumérés ci-dessus, je pense que le graphique aurait ces données:
california : oregon, nevada, arizona
hawaii :
oregon : california, nevada
nevada : oregon, california, arizona
arizona : california, nevada
Je comprends comment insérer des entrées dans le graphique et j’ai envisagé de créer simplement un tableau d’états et d’insérer leur index de tableau dans le graphique, mais il me semble que je devrais pouvoir dire:
add_edge(california, oregon, graph);
mais bien sûr ça ne marche pas. S'il vous plaît, aidez!
Modifier:
Voici un exemple presque identique à ce que j'ai besoin.
La solution
Si vous lisez boost :: adjacency_list, il semble que vous êtes censé utiliser des propriétés pour les sommets plutôt que quelque chose comme une classe:
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);
(mal) adapté de un exemple booster .