分别序列化boost :: graph的vertex_descriptor?

时间:2012-12-06 03:51:12

标签: serialization boost graph stl map

有没有办法让vertex_descriptor boost::graph可序列化? Boost确定<boost/graph/adj_list_serialize.hpp>用于序列化整个图结构,但不是单独的。

我有一个邻接列表图,它包含3dvector(顺便说一下,代表X,Y,Z坐标中的3d世界)顶点

typedef boost::adjacency_list<
        boost::listS,
        boost::listS,
        boost::undirectedS,
        3dvector>
    Graph;

typedef Graph::vertex_descriptor VertexId;
typedef Graph::edge_descriptor EdgeId;

但是我还需要为查找保留单独的映射信息,这就是问题所在:boost不知道如何序列化VertexId。它们存储在STL映射中:std::map<string, VertexId>以便字符串查找可以返回图中的右顶点,因为vertex_descriptor本质上是指向图中特定顶点的引用。

我的目的是将图表和地图序列化为文件,但我找不到序列化vertex_descriptor的方法。

1 个答案:

答案 0 :(得分:0)

您需要存储图形和位置(某些矢量/顶点列表)。您必须为表示顶点的任何内容编写序列化方法。

template<typename Archive>
void serialize(Archive &ar, LatLon &loc, const unsigned int /*version*/) {
    ar &loc.latitude &loc.longitude;
}

现在您可以使用以下方法序列化图表:

std::vector<LatLon> locations; // or a list
archive & graph & locations;

graph是adjencency_list,locations是LatLon类/结构的向量/列表。我认为助推器已经知道如何处理列表/向量。