Peut-être que c'est une question stupide, mais j'essaie d'utiliser dijkstra_shortest_paths de BGL code>, et en particulier, d'utiliser un champ de la propriété de My Edge Bounded comme WeightMap. Mes tentatives ont actuellement conduit à des dizaines de pages d'erreurs de compilateur, alors j'espère que quelqu'un sait comment m'aider. C'est essentiellement ce que mon code ressemble à:
GraphType m_graph;
vector<int> predecessor(num_vertices(m_graph));
vector<float> distances(num_vertices(m_graph), 0.0f);
vector<int> vertex_index_map(num_vertices(m_graph));
for (size_t i=0; i<vertex_index_map.size(); ++i) {
vertex_index_map[i] = i;
}
dijkstra_shortest_paths(m_graph, vertex_from, predecessor, distances,
weightmap, vertex_index_map,
std::less<float>(), closed_plus<float>(),
(std::numeric_limits<float>::max)(), 0.0f,
default_dijkstra_visitor());
// How do I write the right version of weightmap here?
3 Réponses :
Si quelqu'un s'en soucie à ce sujet, l'utilisation de la version de paramètre nommée de l'appel semble avoir fonctionné, comme suit:
dijkstra_shortest_paths(m_graph, vertex_from, weight_map(get(&TrafficGraphEdge::length, m_graph)) .distance_map(make_iterator_property_map(distances.begin(), get(vertex_index, m_graph))));
OK, je viens de perdre trop de temps sur ce problème. Voici la solution pour la postérité:
auto handle_to_something( boost::get(&bundled_in_vertex_type::something, g) );
aussi puissant que le BGL peut être, malheureusement, il n'est pas très facile à utiliser dans mon opinion honnête. Obtenir que cela fonctionne a pris des essais et une erreur considérables, mais voici une version de travail compilée avec Boost 1.53.0 [Nous voulons utiliser l'algorithme de Dijkstra sur la variable "tarif" dans __ge_Data]: J'espère sincèrement que cela vous aidera! Ma tentative ici était de montrer comment accéder à toutes les principales «fonctionnalités» disponibles sur l'algorithme. P> p>