
I need to get the bundled property map with a key_type of the vertex_descriptor and a value_type of the bundled vertex property type from a compressed_sparse_row_graph by get(vertex_bundle, g), but it failed. It works when the graph is an adjacency_list. 1 #include <iostream> 2 #include <string> 3 #include <boost/graph/graph_traits.hpp> 4 #ifndef CSR 5 #include <boost/graph/adjacency_list.hpp> 6 #else 7 #include <boost/graph/compressed_sparse_row_graph.hpp> 8 #endif 9 using namespace boost; 10 using namespace std; 11 struct City { 12 string name; 13 int population; 14 int zipcode; 15 explicit City(string const &n = "", int pop = 0, int zip = 0) : name(n), population(pop), zipcode(zip){} 16 }; 17 struct Highway { 18 string name; 19 double miles; 20 int speed_limit; 21 explicit Highway(string const &n = "", double m = 0, int s = 0) : name(n), miles(m), speed_limit(s){} 22 }; 23 #ifndef CSR 24 typedef adjacency_list<listS, vecS, bidirectionalS, City, Highway> Graph; 25 #else 26 typedef compressed_sparse_row_graph<directedS, City, Highway> Graph; 27 #endif 28 int main(int argc, char* argv[]) 29 { 30 City ct[3] = { City("Beijing", 20, 100000), City("Tianjin", 10, 200000), City("Shanghai", 18, 300000) }; 31 Highway hway[2] = { Highway("JJWay", 200, 100), Highway("JHWay", 1300, 120) }; 32 graph_traits<Graph>::vertex_iterator vi, vi_end; 33 #ifndef CSR 34 Graph map; 35 Graph::vertex_descriptor v[3]; 36 v[0] = add_vertex(ct[0], map); 37 v[1] = add_vertex(ct[1], map); 38 v[2] = add_vertex(ct[2], map); 39 add_edge(v[0], v[1], hway[0], map); 40 add_edge(v[0], v[2], hway[1], map); 41 #else 42 typedef pair<size_t, size_t> Edge; 43 Edge edges[2] = { Edge(0, 1), Edge(0,2) }; 44 Graph map(edges_are_unsorted, edges, edges + 2, hway, 3); 45 int i = 0; 46 for (tie(vi, vi_end) = vertices(map); vi != vi_end; ++vi) 47 map[*vi] = ct[i++]; 48 #endif 49 property_map<Graph, vertex_bundle_t>::type index = get(vertex_bundle, map); 50 for (tie(vi, vi_end) = vertices(map); vi != vi_end; ++vi) 51 cout<<index[*vi].name<<" \t"<<index[*vi].population<<" \t"<<index[*vi].zipcode<<endl; 52 property_map<Graph, std::string City::*>::type Names = get(&City::name, map); 53 for (tie(vi, vi_end) = vertices(map); vi != vi_end; ++vi) 54 cout<<Names[*vi]<<endl; 55 } g++ test.cpp is OK but g++ -DCSR test.cpp errors at line 49.