Boost Graph Library - свойство веса из внешнего вектора

Что я делаю неправильно?

#include <vector>

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/dijkstra_shortest_paths.hpp>

using namespace std;

typedef boost::adjacency_list<> Graph;

void dijkstra(Graph &g, vector<double> &edge_weights, int source, vector<double> &dist,   vector<int> &prev) {
boost::dijkstra_shortest_paths(g, source,
                                 boost::weight_map(boost::make_iterator_property_map(edge_weights.begin(), get(boost::edge_index, g))));

}

(Скомпилировать с: g ++ main.cc -L / usr / local / boost /)

Ошибка:

/usr/include/boost/graph/detail/adjacency_list.hpp:2665: ошибка: неверная инициализация неконстантной ссылки типа 'boost:: detail:: error_property_not_found &' из временного типа 'boost:: detail:: error_property_not_found '

Я думаю, что проблема может заключаться в том, что не существует сопоставления по умолчанию от ребер до целых чисел. Если так, как я могу определить один?

1 ответ

Решение

Ваш график не имеет edge_index свойство, которое вы используете при создании iterator_property_map, Вам нужно будет добавить такое свойство к вашему графику и заполнить его. См. Boost Graph Library: Bundled Properties и итерации по ребрам и edge_index ноль для всех ребер? за то, что должно быть сделано.

Другие вопросы по тегам