
Boost Users : 
Subject: Re: [Boostusers] [BOOST USERS] [ BGL ] [GRAPH ] iterating through the vertices and edges of a filter graph
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 20120126 09:38:19
On Thu, 26 Jan 2012, srinivas boppu wrote:
> Hello All,
>
> I need a small help in iterating through the vertices and edges of a filtered graph.
>
> Here is some sample code of the filtered graph. (http://programmingexamples.net/wiki/CPP/Boost/BGL/FilteredGraph)
>
> 
> 
>
> #include <iostream>
>
> #include <boost/graph/adjacency_list.hpp>
> #include <boost/array.hpp>
> #include <boost/graph/filtered_graph.hpp>
> #include <boost/graph/graph_utility.hpp>
>
> template <typename TGraph>
> struct vertex_id_filter
> {
> bool operator()(const typename boost::graph_traits<TGraph>::vertex_descriptor& v) const
> {
> return 3 < v; // keep all vertx_descriptors greater than 3
> }
> };
>
> int main()
> {
> using namespace boost;
>
> typedef adjacency_list<vecS, vecS, directedS,
> no_property, property<edge_weight_t, int> > Graph;
> typedef property_map<Graph, edge_weight_t>::type EdgeWeightMap;
>
> unsigned int numberOfVertices = 10;
> Graph g(numberOfVertices);
> for(unsigned int i = 0; i < numberOfVertices  1; ++i)
> {
> add_edge(i, i+1, g);
> }
>
> std::cout << "Original graph:" << std::endl;
> boost::print_graph(g);
>
> vertex_id_filter<Graph> filter;
> filtered_graph<Graph, boost::keep_all, vertex_id_filter<Graph> > filteredGraph(g, boost::keep_all(), filter); // (
> graph, EdgePredicate, VertexPredicate)
>
> std::cout << "Filtered graph:" << std::endl;
> boost::print_graph(filteredGraph);
> return 0;
> }
> 
> 
>
> Here is my question.
>
> How do I iterate through the vertices and edges of "filteredGraph".
> I wanted to use the functions
>
> vertices( filteredGraph) and edges(filteredGraph)
>
> seems that we cannot use these functions as in the case of filtered graphs they return filtered_iterators.
Yes, you use those functions and use the filtered_iterators produced to do
your iteration. The special iterator type is used to return only the
vertices and edges allowed by the filter. Iteration is exactly the same
as on an unfiltered graph, just with the filtered_graph's iterators and
functions.
 Jeremiah Willcock
Boostusers 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