Hi List,
as the Subject states. I would like to initialize a std::priority_queue
with vertex_descriptors and a comparison object as a template parameter
but the compiler tells me:
...
/usr/include/c++/4.5/bits/stl_heap.h:303:4: error: invalid conversion
from ‘unsigned int’ to ‘void*’
/usr/include/c++/4.5/bits/stl_heap.h:303:4: error: initializing
argument 1 of ‘bool degree_compare::operator()(void* const&, void*
const&)’
...
if i try to initialize the queue and i just don't know why 'bool
degree_compare::operator()(void* const&, void* const&)' comes up.
Could you please help me to initialize my priority_queue?
best regards
Christoph
// begin code
#include <iostream>
#include <map>
#include <queue>
#include
#include
typedef boost::adjacency_list_traits
link_adjacency_list_traits;
struct vertex_properties;
struct edge_properties;
struct graph_properties;
struct vertex_properties {
std::map
used_colors;
// this one works fine, i can use a traits::edge_descriptor
};
struct edge_properties {
int color;
};
struct degree_compare;
typedef std::priority_queue <
link_adjacency_list_traits::vertex_descriptor,
std::vector ,
degree_compare> VERTEX_DEGREE_PQ;
struct graph_properties {
int delta;
boost::shared_ptr pq;
};
typedef boost::adjacency_list < boost::listS,
boost::listS,
boost::bidirectionalS,
vertex_properties,
edge_properties,
graph_properties>
link_graph;
class degree_compare {
private:
link_graph g;
public:
degree_compare(const link_graph &g): g(g) {std::cout << "Num Vertices:
" << num_vertices(g) << std::endl;}
bool operator()(const
boost::graph_traits::vertex_descriptor &a,
const boost::graph_traits::vertex_descriptor &b) {
return out_degree(a, g) < out_degree(b, g);
}
};
int main ()
{
link_graph g;
boost::graph_traits::vertex_descriptor a = add_vertex (g);
degree_compare dc(g); // init the comparison object
VERTEX_DEGREE_PQ pq(dc);// init the p_queue with comparison
// object fails
//pq.push(a);
//pq.top();
}
// end code