Boost logo

Boost Users :

Subject: [Boost-users] How to retrieve the bundled property map of a compressed_sparse_row_graph
From: ÎâìÍ (wooyen_at_[hidden])
Date: 2010-03-30 03:44:08


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.



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net