[英]Boost graph library: Get edge_descriptor or access edge by index of type int
我是一個BGL新手,有一個(可能)一個簡單的問題:我有一個有向圖,並為邊緣使用捆綁的屬性,其中之一是int類型的索引。 知道唯一索引后,我想獲取該邊緣的相應edge_descriptor以便對其執行操作。 以下示例總結了我的問題:
#include <boost/graph/adjacency_list.hpp>
struct EdgeProperties {
EdgeProperties(): distance(10), time_limit(5) {};
int index;
int distance;
int time_limit;
};
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS, boost::no_property, EdgeProperties> Graph;
int main() {
Graph graph;
EdgeProperties edge_prop1, edge_prop2, edge_prop3, edge_prop4;
// Define edge properties
edge_prop1.index = 0;
edge_prop2.index = 1;
edge_prop3.index = 2;
edge_prop4.index = 3;
// Add edges to graph
boost::add_edge(0, 1, edge_prop1, graph);
boost::add_edge(0, 2, edge_prop2, graph);
boost::add_edge(1, 3, edge_prop3, graph);
boost::add_edge(2, 3, edge_prop4, graph);
// Get vertex_descriptor from an (int) index:
int vertex_index = 2;
boost::graph_traits<Graph>::vertex_descriptor v = boost::vertex(vertex_index, graph);
// I would like to get an edge_descriptor from an (int) index property:
// The following DOES NOT work:
boost::graph_traits<Graph>::edge_descriptor e = boost::edge(edge_prop1.index, graph);
}
我也閱讀了有關屬性映射的信息,但是找不到解決我的問題的方法。 與內部屬性相比,我更喜歡捆綁屬性。 有沒有一種方法可以通過bundle屬性為邊分配唯一的int類型索引,並通過這些int類型值訪問邊?
可悲的是,我認為boost::graph
在這里沒有立即幫助。
首先,沒有一種機制可以基於edge屬性的字段來查找邊緣(或頂點)-BGL會保留任何此類映射,而您擁有的“ index”字段完全是為了您的目的。
其次,存在boost::edges
函數,該函數返回圖形所有邊緣的迭代器范圍。 我雖然可以將vecS作為邊緣容器類型傳遞給adjacency_list模板,然后在此范圍內查看,但請參閱http://www.boost.org/doc/libs/1_61_0/libs/graph/doc/EdgeListGraph.html迭代器僅需要是多遍輸入迭代器,而實現正是這樣做的-即使將vecS作為邊緣類型,也不能進行隨機訪問。
因此,似乎完成您想要的唯一方法是保持自己的unodered_map
從索引到邊緣描述符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.