我有一个树状的结构
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;
}
在非可复制类型的密钥上,此操作因密钥的已删除复制密钥错误而失败。安德拉会解决这个问题吗?如果是这样,我如何使用不支持该方法的gcc早于4.8的解决方法?
编辑:我发现迭代器返回的密钥是const,我不应该更改密钥,因为这将导致查找:s失败。 但是,我不需要密钥,所以现在我想知道在这种情况下是否可以安全地首先对非const进行类型转换。答案 0 :(得分:0)
我认为你打算做以下事情:
while(i!=dir.directories.end()) {
directories.insert(std::move(*i));
++i;
}
实际上,您正在循环显示当前directories
地图中的条目,该地图可能为空。这将循环遍历dir
中的目录,并将每个目录复制到您的本地地图中。
class Directory {
public:
void merge(Directory& dir) {
std::map<Key, Directory>::iterator i=dir.directories.begin();
while(i!=dir.directories.end()) {
directories.insert(std::move(*i));
++i;
}
}
private:
std::map<Key, Directory> directories;
};
这就是你想要的吗?