【发布时间】:2013-08-06 18:23:16
【问题描述】:
我有一个树状结构
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 的已删除复制 ctor 错误。安顿会解决问题吗?如果是这样,我该如何为不支持该方法的 4.8 之前的 gcc 使用解决方法?
编辑:我发现迭代器返回的键是 const,我不应该更改键,因为这会使查找:s 失败。 但是,我将 不再需要密钥了,所以现在我想知道在这种情况下,首先将类型转换为非 const 是否安全。
【问题讨论】:
-
您确定不需要图表吗?
-
在你的例子中,你正在循环你试图填充的地图。您应该遍历
dir中的文件并将它们添加到directories。 -
@user245710 不。如何实现图表?我意识到我应该更多地了解数据结构。
-
您的
Key是否可移动复制和移动分配?
标签: c++ move-semantics stdmap