【问题标题】:Boost adjacency_list help needed需要提升 adjacency_list 帮助
【发布时间】:2009-03-03 21:38:34
【问题描述】:

我正在尝试使用 Boost 的 adjacency_list 类型,但我无法理解 documentation

假设我定义了一个名为 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 几乎正是我所需要的示例。

【问题讨论】:

  • 这怎么行,出错会有帮助。

标签: c++ boost adjacency-list


【解决方案1】:

阅读 boost::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

【讨论】:

  • 喂!这比我想象的还要糟糕。我想我会找到一种不同的方法来做到这一点。我不想维护那么聪明的代码。感谢您的回答。
  • 请将 VertexProperties 添加为 Graph 的第 4 个模板参数。这意味着您必须将 bidirectionalS 添加为 3rd。
  • 谢谢,我已经做出了这些改变。
猜你喜欢
  • 1970-01-01
  • 2019-09-20
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多