Boost logo

Boost Users :

Subject: Re: [Boost-users] [BOOST USERS] [ BGL ] [GRAPH ] iterating through the vertices and edges of a filter graph
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2012-01-26 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


Boost-users 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