Перебор весов ребер константного повышения :: graph

Мне нужно пройтись по краям графика и проверить вес каждого ребра. Я не изменяю ребра, поэтому моя функция принимает константную ссылку на график. Однако единственный способ, которым я знаю, чтобы получить граничные веса, — это получить доступ к карте свойств, которая, кажется, нарушает константу.

void printEdgeWeights(const Graph& graph) {
typedef Graph::edge_iterator EdgeIterator;
std::pair<EdgeIterator, EdgeIterator> edges = boost::edges(graph);

typedef boost::property_map<Graph, boost::edge_weight_t>::type WeightMap;
// The following line will not compile:
WeightMap weights = boost::get(boost::edge_weight_t(), graph);

EdgeIterator edge;
for (edge = edges.first; edge != edges.second; ++edge) {
std::cout << boost::get(weights, *edge) << std::endl;
}
}

Так что я должен сделать это:

Graph& trust_me = const_cast<Graph&>(graph);
WeightMap weights = boost::get(boost::edge_weight_t(), trust_me);

Есть ли способ избежать этого?

С другой стороны, будут ли поиски на карте свойств постоянными по времени?

Для справки, вот мое определение Графа.

struct FeatureIndex { ... };
typedef boost::property<boost::vertex_index_t, int,
FeatureIndex>
VertexProperty;
typedef boost::property<boost::edge_index_t, int,
boost::property<boost::edge_weight_t, int> >
EdgeProperty;
typedef boost::subgraph<
boost::adjacency_list<boost::vecS,
boost::vecS,
boost::undirectedS,
VertexProperty,
EdgeProperty> >
Graph;

Спасибо!

5

Решение

Для дальнейшего использования я нашел это. Это не сработает

const boost::property_map<Graph, boost::edge_weight_t>::type

но property_map определяет const_type

boost::property_map<Graph, boost::edge_weight_t>::const_type

Документация для get () находится на этой странице:
http://www.boost.org/doc/libs/1_51_0/libs/graph/doc/adjacency_list.html

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]