gpt4 book ai didi

c++ - 遍历 const boost::graph 的边权重

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:43 25 4
gpt4 key购买 nike

我需要遍历图的边并检查每条边的权重。我没有修改边,因此我的函数采用对图形的常量引用。但是,我知道获得边权重的唯一方法是访问属性映射,这似乎违反了常量性。

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;

谢谢!

最佳答案

为了将来引用,我找到了它。这行不通

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

关于c++ - 遍历 const boost::graph 的边权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12501188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com