void assign_sources_and_targets_global(std::vector<vertex_descriptor>& sources,
                                        std::vector<vertex_descriptor>& targets,
                                        vertices_size_type numverts,
                                        GlobalToLocal global_to_local) {
   assert (sources.size() == targets.size());
   // Do an in-place histogram sort (at least that's what I think it is) to
   // sort sources and targets
   m_rowstart.clear();
   m_rowstart.resize(numverts + 1);
   boost::graph::detail::count_starts
     (sources.begin(), sources.end(), m_rowstart.begin(), numverts,
      keep_all(), boost::make_property_map_function(global_to_local));
   boost::graph::detail::histogram_sort_inplace
     (sources.begin(), m_rowstart.begin(), numverts,
      targets.begin(), boost::make_property_map_function(global_to_local));
   // Now targets is the correct vector (properly sorted by source) for
   // m_column
   m_column.swap(targets);
 }
 inline typename vertex_subset_complement_filter<Graph, Set>::type
 make_vertex_subset_complement_filter(Graph& g, const Set& s) {
   typedef typename vertex_subset_complement_filter<Graph, Set>::type Filter;
   is_not_in_subset<Set> p(s);
   return Filter(g, keep_all(), p);
 }