我正在编写一个应用程序,它用类似的东西解析数据结构
struct Block
{
std::string foo;
/* ... even more local data ... */
};
std::map<std::string, Block> blockContainer; // Each Block will have a name here
struct Signal
{
// the direct links to the Blocks, no redundant storage of the name so that an
// simple renaming of a Block would be possible
std::map<std::string, Block>::iterator from;
std::map<std::string, Block>::iterator to;
std::string bar;
/* ... even more local data ... */
};
std::vector<Signal> signalContainer;
解析和填写这个列表非常容易。现在我需要根据信号对块进行拓扑排序 - 当我使用时也很容易Boost::Graph
.
但首先在 STL 数据结构中解析它,然后将它们复制到 Boost::Graph 结构对我来说没有多大意义。特别是之后对这些数据所做的一切可能只是一些简单的修改(添加/删除块和信号,一些信号重新路由;再次将其序列化),然后进行新的拓扑排序。
所以我对这些可能的解决方案中的任何一个都很好:
- 让 Boost::Graph 直接在我的容器上工作
- 将数据直接解析为 Boost::Graph 数据结构(例如使用具有捆绑属性的图,例如
boost::adjacency_list<boost::mapS, boost::vecS, boost::directedS, Block, Signal>
)
但我似乎不够聪明,无法理解这里的文档。此外,我在网上找到的所有示例都展示了如何使用捆绑属性 - 但没有展示如何使用动态构建图表。 (当然,不能同时具有节点和顶点属性,或者如何使用std::map
让节点通过名称访问它们,...)
有人可以帮我吗?
Thanks!
没有人足够聪明来了解 boost::graph 文档;)需要花费大量时间来学习如何使用它。
您可以围绕数据创建一个增强图结构,但是,这可能会相当痛苦。那里有一个文档:http://www.boost.org/doc/libs/1_52_0/libs/graph/doc/leda_conversion.html http://www.boost.org/doc/libs/1_52_0/libs/graph/doc/leda_conversion.html
我建议采用第二种方法,但我不确定您的数据结构。
你看到这个问题了吗:将自定义顶点添加到增强图 https://stackoverflow.com/questions/3100146/adding-custom-vertices-to-a-boost-graph它能满足您的需求吗?
您还可以执行以下操作来创建节点(或边)并立即定义属性:
vertex_t u = boost::add_vertex(Block(42, "hi"), g);
您可能需要在解析时维护映射。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)