0

有什么办法可以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>以便字符串查找可以返回图中的正确顶点,因为 avertex_descriptor本质上是指向图中特定顶点的引用。

我的意图是将图形和地图序列化到一个文件中,但我找不到序列化vertex_descriptor.

4

1 回答 1

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;

graphadjencency_list在哪里,locations是 LatLon 类/结构的向量/列表。我认为 boost 已经知道如何处理列表/向量。

于 2012-12-06T07:02:51.420 回答