0

シリアライズ可能vertex_descriptorにする方法はありますか?boost::graphBoost は<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;

ただし、ルックアップ用に別のマッピング情報を保持する必要もあります。これが問題です。ブーストはシリアル化の方法を知りませんVertexId。それらは STL マップにそのまま格納されます。std::map<string, VertexId>これにより、文字列ルックアップはグラフ内の正しい頂点を返すことができます。これvertex_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;

adjencency_list はどこgraphにあり、locationsLatLon クラス/構造体のベクトル/リストです。ブーストはすでにリスト/ベクターの処理方法を知っていると思います。

于 2012-12-06T07:02:51.420 に答える