続 新ステージ構造考察

おおよそ考えがまとまってきました。
マップチップ一個分を、

struct stage_component
{
    int x; // 1ドット単位
    int y; // 1ドット単位
    hamigaki::uuid type; // キャラクタの種類

    std::pair<int,int> x_y() const
    {
        return std::pair<int,int>(x,y);
    }

    std::pair<int,int> y_x() const
    {
        return std::pair<int,int>(y,x);
    }
};

として、マップエディタでは

namespace mi = boost::multi_index;

typedef mi::multi_index_container<
  stage_component,
  mi::indexed_by<
    mi::ordered_unique<
      mi::const_mem_fun<
        stage_component, std::pair<int,int>, &stage_component::x_y
      >
    >
  >
> stage_map;

ゲームでは

typedef mi::multi_index_container<
  stage_component,
  mi::indexed_by<
    // 横スクロール用
    mi::ordered_unique<
      mi::const_mem_fun<
        stage_component, std::pair<int,int>, &stage_component::x_y
      >
    >,
    // 縦スクロール用
    mi::ordered_unique<
      mi::const_mem_fun<
        stage_component, std::pair<int,int>, &stage_component::y_x
      >
    >
  >
> stage_map;

という感じで考えています。
保存形式は単純に各要素をバイナリっぽく吐き出してzlibで圧縮しようと思います。
あと、拡張子を考えないといけません。
今は「.txt」なので、ただのテキストファイルと区別付かなくてマップエディタで開くときに困るんですよね。