簡體   English   中英

Boost圖形庫:通過int類型的索引獲取edge_descriptor或訪問edge

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM