私は木のような構造を持っています
class Directory
{
public:
void merge(Directory&& dir);
private:
std::map<Key, Directory> directories;
};
merge は、dir 内の各サブディレクトリをディレクトリに移動します。すべてのキーとディレクトリをコピーせずにこれを行うことはできますか?
私は言ってみました
auto i=dir.begin();
while(i!=dir.end())
{
directories.insert(std::move(*i));
++i;
}
コピー不可タイプの Key では、これは Key の削除された copy ctor エラーで失敗します。問題を解決しますか?その場合、その方法をサポートしていない 4.8 より古い gcc の回避策を使用するにはどうすればよいですか?
編集:イテレータによって返されるキーが const であることがわかりました。キーを変更しないでください。これにより、ルックアップが失敗します。しかし、キーはもう必要ないので、この場合、最初に非 const に型キャストしても安全かどうか疑問に思います。