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.

Était-ce utile?

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 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top