
I have attached a minimal working program to test the sort function on a list of edges. Compile with : g++ -O3 prog.cpp -o prog The problem is line "myList.sort(SortByName< graph_t <edge_t> >);" near the bottom of the page. See comments. //======================================================================= // Sort Testing Program - prog.cpp //======================================================================= #include <iostream> #include <string> #include <boost/graph/adjacency_list.hpp> #include <boost/graph/properties.hpp> using namespace boost; using namespace std; struct vertex_properties { }; struct edge_properties { string eName; }; typedef adjacency_list < vecS, vecS, bidirectionalS >::edge_descriptor edge_t; typedef adjacency_list < vecS, vecS, bidirectionalS >::vertex_descriptor vertex_t; typedef adjacency_list < vecS, vecS, bidirectionalS, vertex_properties, edge_properties > graph_t; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// template < typename Graph > void add_edges(Graph & g) { // Add some edges with names. typename graph_traits<Graph>::edge_iterator edge_iter, edges_end; std::pair< typename graph_traits<Graph>::edge_descriptor, bool > a = add_edge(1,2,g); g[a.first].eName = "A"; std::pair< typename graph_traits<Graph>::edge_descriptor, bool > b = add_edge(1,3,g); g[b.first].eName = "B"; std::pair< typename graph_traits<Graph>::edge_descriptor, bool > c = add_edge(2,1,g); g[c.first].eName = "C"; std::pair< typename graph_traits<Graph>::edge_descriptor, bool > d = add_edge(2,3,g); g[d.first].eName = "D"; cout << endl << " list of edges " << endl; for (tie(edge_iter, edges_end) = edges(g); edge_iter != edges_end; ++edge_iter) cout << " " << g[*edge_iter].eName << endl; } template < typename Graph > struct SortByName { // The Predicate template < typename edge_t > bool operator()(const edge_t& a, const edge_t& b) const { return g[a].eName < g[b].eName; } Graph g; }; template < typename Graph > void Sort_Test(Graph & g) { // Test the sort function. typedef std::list<graph_traits<graph_t>::edge_descriptor> edge_list; typename graph_traits<Graph>::edge_iterator edge_iter, edges_end; edge_list myList; // Load myList with the edges of g for (tie(edge_iter, edges_end) = edges(g); edge_iter != edges_end; ++edge_iter) myList.push_back(*edge_iter); // Write out myList cout << endl << " myList " << endl; for (edge_list::iterator i = myList.begin(); i != myList.end(); ++i) cout << " " << g[*i].eName << endl; // Sort myList // If the following line is commented out the program compiles and runs OK. myList.sort(SortByName< graph_t <edge_t> >); //With the above line uncommented the compiler says: // "prog.cpp:88: error: ‘graph_t’ is not a template" -- I'm stumped. } int main() { graph_t g; add_edges(g); Sort_Test(g); } ________________________________ From: Cedric Laczny <cedric.laczny@gmx.de> To: boost-users@lists.boost.org Sent: Sat, November 6, 2010 3:54:49 AM Subject: Re: [Boost-users] [BGL] Unable to sort list of edge_descriptors if my suggestion does not fix the problem, please include a complete example.