2009-03-03 75 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