I'm trying to obtain an iterator of edges with a different ordering than that given in egdes(g).
The following compiles but segfaults at
std::sort( VE.begin(), VE.end(), ordering< Graph, edd >() );
(runs ok if the above line is commented out)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef Traits::edge_descriptor edd;
// Create ordering
template < typename Graph, typename edd >
struct ordering {
Graph & g;
bool operator ()(const edd & a,
const edd & b) {
return g[a].eName < g[b].eName;
}
};
template < typename Graph >
int initialize_container( Graph & g )
{
typename graph_traits<Graph>::edge_iterator edge_iter, edges_end;
// create vector of edge descriptors.
std::vector< Traits::edge_descriptor > VE(num_edges(g)+1);
int i = 1; // (Sometimes I like to start at 1.)
//insert edge
descriptors into vector of edge descriptors.
for (tie(edge_iter, edges_end) = edges(g); edge_iter != edges_end; ++edge_iter) {
cout << " *edge_iter = " << *edge_iter << endl;
VE[i++] = *edge_iter;
}
// segfaults here
//sort vector of edge descriptors.
std::sort( VE.begin(), VE.end(), ordering< Graph, edd >() );
//print sorted edge
descriptors.
for( int i = 1; i < num_edges(g)+1; ++i )
cout << " -Edge " << i << " = " << VE[i] << endl;
}
Thanks