One set is associated to edges of graph1 and another set associated to edges of graph2.
I don't understand why is it possible to access information about edges of graph2 by using graph1 and the edge descriptors of graph2.
I realized of that because of an own mistake when using graphs.
What I would like to know is why is that possible to do and if it should be an exception that can handle this situation.
#include <iostream>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graphviz.hpp>
#include <fstream>
#include "GraphInfo.h"
using namespace std;
using namespace boost;
typedef adjacency_list<setS, vecS, bidirectionalS, VertexInfo, EdgeInfo> Graph;
void printGraph(Graph graph, string file)
{
ofstream ofs(file.c_str());
dynamic_properties dp;
dp.property("node_id", get(vertex_index, graph));
dp.property("label", get(&EdgeInfo::weight, graph));
write_graphviz_dp(ofs, graph, dp);
}
int main()
{
Graph graph1;
Graph::vertex_descriptor a1 = add_vertex(graph1);
Graph::vertex_descriptor b1 = add_vertex(graph1);
Graph::vertex_descriptor c1 = add_vertex(graph1);
Graph::edge_descriptor e1 = (add_edge(a1, b1, graph1)).first;
Graph::edge_descriptor e2 = (add_edge(b1, a1, graph1)).first;
graph1[a1].id = 10;
graph1[b1].id = 20;
graph1[c1].id = 30;
graph1[e1].weight = 1;
graph1[e2].weight = 2;
Graph graph2;
Graph::vertex_descriptor a2 = add_vertex(graph2);
Graph::vertex_descriptor b2 = add_vertex(graph2);
Graph::vertex_descriptor c2 = add_vertex(graph2);
Graph::vertex_descriptor d2 = add_vertex(graph2);
Graph::edge_descriptor e4 = (add_edge(c2, b2, graph2)).first;
Graph::edge_descriptor e5 = (add_edge(b2, c2, graph2)).first;
Graph::edge_descriptor e6 = (add_edge(d2, a2, graph2)).first;
Graph::edge_descriptor e7 = (add_edge(a2, d2, graph2)).first;
graph2[a2].id = 10;
graph2[b2].id = 20;
graph2[c2].id = 30;
graph2[e4].weight = 13;
graph2[e5].weight = 14;
graph2[e6].weight = 15;
graph2[e7].weight = 16;
// WHY IS THIS POSSIBLE TO DO
// IT IS ASKING FOR AN EDGE OF GRAPH2 BUT USING GRAPH1 ???
double weight = graph1[e7].weight;
cout<<"weight: "<<weight<<endl;
printGraph(graph1, "graph1.dot");
printGraph(graph2, "graph2.dot");
cout << "end" << endl;
return 0;
}