簡體   English   中英

創建boost :: graph edge_weight屬性映射

[英]creating boost::graph edge_weight property map

使用帶有捆綁屬性的boost :: graph。 我希望能夠使用各種不同的可能邊緣加權方案來運行搜索。 如果可能的話,我不想為捆綁屬性創建額外的類,並根據搜索類型傳遞不同的權重貼圖,而無需創建新圖或修改圖中的所有現有屬性。

我可以手動為edge_weight_t構建property_map嗎? 這是我到目前為止所得到的:

typedef boost::property_map<SSPSGraph_t, boost::edge_weight_t>::type WeightMap;
typedef boost::property<boost::edge_weight_t, float> DistanceProperty;

而且我希望能夠做到

WeightMap distances;
edge_descriptor_t e = some_edge_or_another;
float d=some_derived_distance_value;

並將距離[e]分配給適當的值 -

distances[e]= ?

或者我只是需要分解並為捆綁屬性構建一個新結構 - 我一直試圖避免的 - 並從中創建權重圖? boost :: graph的新功能; 不要以為我在這里做的事情並不完全愚蠢。

我不確定我理解你的問題。 以下是一些可能對您有所幫助的提示:

你用來定義WeightMap的boost :: property_map要求你在圖形中添加相應的屬性(你只需要定義DistanceProperty所需的一半):

typedef boost::property<boost::edge_weight_t, float> DistanceProperty;

typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirS, boost::no_property, DistanceProperty> MyGraph;

如果沒有這樣做,boost :: property_map無論如何也無法幫助你。

如果您不想為要嘗試的每個不同方案添加不同的權重屬性,則可以選擇在圖形定義之外定義此類屬性。 這可以做 - 使用std :: map和boost :: associative_property (這很簡單,但具有映射的效率) - 使用boost :: vector_property_map ,這更有效(感謝底層的std :: vector),但是需要標識符property_map,即property_map,它可以從提供的邊緣提取數字標識符(理想情況下介於0和num_edges() - 1之間)。 此property_map通常在圖中定義。

如果我的回答對您沒有幫助(或者不夠),請在您的問題中更准確一些,以便我可以更新我的答案!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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