Bonjour,
J'ai besoin souvent d'ajouter/supprimer des edges et des vertex de mon graph. Lorsque j'utilise un graph où VertexList est vecS, ça ne pose aucun problème pour accéder au descripteurs de sommets etc, comme suite:
typedef adjacency_list<setS, vecS, undirectedS, MyNodeData, MyEdgeData> Graph;
Code :
- typedef Graph::vertex_descriptor MyNodeDataID;
- typedef Graph::edge_descriptor MyEdgeDataID;
- typedef graph_traits < Graph >::vertex_iterator VertexIterator;
- typedef graph_traits < Graph >::edge_iterator EdgeIterator;
- typedef graph_traits < Graph >::adjacency_iterator AdjacencyIterator;
- typedef property_map < Graph, vertex_index_t >::type IndexMap;
- Graph g;
- const IndexMap index = get(vertex_index, g);
- /* Puis après avoir ajouté des vertex et edges, je peux accéder par exemple à la liste des vertex comme suite: */
- pair<VertexIterator, VertexIterator> vi;
- for(vi = vertices(g); vi.first != vi.second; ++vi.first)
- {
- cout << "vertex: " << index[*vi.first] << endl;
- // ou: cout << "vertex: " << *vi.first << endl;
- }
|
Par contre si je met autre chose à la place vecS pour VertexList, je ne peux pas parcourir les vertex (ou edges ...) de cette façon ! J'ai besoin d'utiliser autre chose que vecS pour VertexList vu que ça pause des problèmes pour supprimer quelque vertex par la suite si j'utilise vecS.
Code :
- typedef adjacency_list<setS, setS, undirectedS, MyNodeData, MyEdgeData> Graph;
|
Comment m'y prendre svp ?
Merci.