How can I use the Boost Graph Library to lay out verticies?
I'm trying to lay out vertices using the Boost Graph Library. However, I'm running into some compilation issues which I'm unsure about. Am I using the BGL in an improper manner? My code is:
PositionVec position_vec(2);
PositionMap position(position_vec.begin(), get(vertex_index, g));
int iterations = 100;
double width = 100.0;
double height = 100.0;
minstd_rand gen;
rectangle_topology<> topology(gen, 0, 0, 100, 100);
fruchterman_reingold_force_directed_layout(g, position, topology); //Compile fails on this line
The diagnostics produced by clang++(I've also tried GCC) are:
In file included from test.cpp:2:
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:95:3: error: no member named 'dimensions' in
'boost::simple_point<double>'
BOOST_STATIC_ASSERT (Point::dimensions == 2);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from test.cpp:2:
In file included from /Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:13:
In file included from /Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/graph_traits.hpp:15:
In file included from /Volumes/Data/mike/Downloads/boost_1_43_0/boost/tuple/tuple.hpp:24:
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/static_assert.hpp:118:49: note: instantiated from:
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
开发者_开发百科 ^
In file included from test.cpp:2:
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:95:3: note: instantiated from:
BOOST_STATIC_ASSERT (Point::dimensions == 2);
^ ~~~~~~~
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:95:31: note: instantiated from:
BOOST_STATIC_ASSERT (Point::dimensions == 2);
~~~~~~~^
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:417:19: note: in instantiation of template class
'boost::grid_force_pairs<boost::rectangle_topology<boost::random::linear_congruential<int, 48271, 0, 2147483647, 399268537> >,
boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::simple_point<double> *,
std::vector<boost::simple_point<double>, std::allocator<boost::simple_point<double> > > >,
boost::vec_adj_list_vertex_id_map<boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, unsigned
long>, boost::simple_point<double>, boost::simple_point<double> &> >' requested here
make_grid_force_pairs(topology, position, g)),
^
/Volumes/Data/mike/Downloads/boost_1_43_0/boost/graph/fruchterman_reingold.hpp:431:3: note: in instantiation of function template
specialization
'boost::fruchterman_reingold_force_directed_layout<boost::rectangle_topology<boost::random::linear_congruential<int, 48271, 0,
2147483647, 399268537> >, boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS,
boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, boost::no_property, boost::no_property,
boost::listS>, boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::simple_point<double> *,
std::vector<boost::simple_point<double>, std::allocator<boost::simple_point<double> > > >,
boost::vec_adj_list_vertex_id_map<boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, unsigned
long>, boost::simple_point<double>, boost::simple_point<double> &>, boost::square_distance_attractive_force,
boost::attractive_force_t, boost::no_property>' requested here
fruchterman_reingold_force_directed_layout
^
test.cpp:48:3: note: in instantiation of function template specialization
'boost::fruchterman_reingold_force_directed_layout<boost::rectangle_topology<boost::random::linear_congruential<int, 48271, 0,
2147483647, 399268537> >, boost::adjacency_list<boost::listS, boost::vecS, boost::undirectedS,
boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, boost::no_property, boost::no_property,
boost::listS>, boost::iterator_property_map<__gnu_cxx::__normal_iterator<boost::simple_point<double> *,
std::vector<boost::simple_point<double>, std::allocator<boost::simple_point<double> > > >,
boost::vec_adj_list_vertex_id_map<boost::property<boost::vertex_name_t, std::basic_string<char>, boost::no_property>, unsigned
long>, boost::simple_point<double>, boost::simple_point<double> &> >' requested here
fruchterman_reingold_force_directed_layout(g, position, topology);
^
1 error generated.
I can never make heads or tails of BGL code either :p When I do need to use it for something I usually check out the included unit-test/example file for the function I want to use. Many times there is an example in there that can be easily modified.
精彩评论