|
Boost Users : |
Subject: Re: [Boost-users] [graph] Graph type needed in graph proptery, cyclic definition problem, minimal example
From: Jeremiah Willcock (jewillco_at_[hidden])
Date: 2011-10-26 15:52:40
On Wed, 26 Oct 2011, Christoph wrote:
> i am sorry but i can't find the solution to my problem. I know how to
> use
>
> boost::adjacency_list_traits<boost::listS, boost::vecS,
> boost::bidirectionalS>::vertex_descriptor
>
> and
>
> boost::adjacency_list_traits<boost::listS, boost::vecS,
> boost::bidirectionalS>::edge_descriptor
>
> inside of bundled graph properties but i need the graph type itself to
> use 'vertex_degree (u, g)' in the comparison object given to a
> priority_queue inside of the graph_property struct (see first example).
Is having a shared_ptr (or scoped_ptr) to the priority_queue acceptable to
have in your graph property? If so, I have it working:
// begin code
#include <iostream>
#include <map>
#include <queue>
#include <boost/graph/adjacency_list.hpp>
#include <boost/smart_ptr.hpp>
typedef boost::adjacency_list_traits<boost::listS, boost::vecS,
boost::bidirectionalS>
link_adjacency_list_traits;
struct vertex_properties;
struct edge_properties;
struct graph_properties;
struct vertex_properties {
std::map <int, link_adjacency_list_traits::edge_descriptor >
used_colors;
// this one works fine, i can use a traits::edge_descriptor
};
struct degree_compare;
struct graph_properties {
int delta;
boost::shared_ptr<
std::priority_queue<
link_adjacency_list_traits::vertex_descriptor,
std::vector<link_adjacency_list_traits::vertex_descriptor>,
degree_compare> > pq;
// link_adjacency_list_traits::??? g;
// i need a 'traits_graph', too
// link_graph g; is not possible because its definition needs
// the definition of graph_properties
// how to declare it?
// but out_degree (u, g) does not need to know any properties
};
struct edge_properties {
int color;
};
typedef boost::adjacency_list < boost::listS,
boost::listS,
boost::bidirectionalS,
vertex_properties,
edge_properties,
graph_properties>
link_graph;
struct degree_compare {
const link_graph& g;
degree_compare(const link_graph& g): g(g) {}
bool operator()(const
boost::graph_traits<link_graph>::vertex_descriptor& a,
const
boost::graph_traits<link_graph>::vertex_descriptor& b) const {
return out_degree(a, g) < out_degree(b, g);
}
};
int main ()
{
link_graph g;
}
// end code
-- 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