2009-03-03 99 views
2

我正在嘗試使用Boost的adjacency_list類型,我無法理解documentation提升adjacency_list幫助需要

說我定義一個名爲State類和我實例化一個實例爲在美國每個州:

class State { ... }; 
State california, oregon, nevada, arizona, hawaii, ... 

我想進入這些成一個boost ::的adjacency_list的頂點狀態和邊緣是邊界。對於我上面列出的狀態,我認爲該圖將有這樣的數據:

california : oregon, nevada, arizona 
hawaii : 
oregon : california, nevada 
nevada : oregon, california, arizona 
arizona : california, nevada 

我明白如何把整數到圖形和我考慮只讓狀態的數組,將其數組索引到圖形,但似乎我應該可以這樣說:

add_edge(california, oregon, graph); 

但當然,這是行不通的。請幫忙!

編輯:
Here's幾乎正是我需要的例子。

+0

這是不行的,錯誤會有幫助。 – user7116 2009-03-03 21:52:08

回答

3

讀了升壓::的adjacency_list,看來你應該使用屬性的頂點,而不是像一個類:

struct VertexProperties { 
    std::string stateName; 
}; 

typedef adjacency_list<listS, listS, bidirectionalS, VertexProperties> Graph; 
Graph adjacentStates(50); 

property_map<Graph, std::string VertexProperties::*>::type 
    stateName = get(&VertexProperties::stateName, adjacentStates); 

add_edge(vertex("california", adjacentStates), vertex("oregon", adjacentStates), adjacentStates); 

(很差)改編自an example in boost

+0

Oy!這比我想象的更糟糕。我想我會找到一個不同的方式來做到這一點。我不想維護那些聰明的代碼。感謝你的回答。 – criddell 2009-03-03 22:15:26