gpt4 book ai didi

c++ - 无序集 : remove with move

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:51 24 4
gpt4 key购买 nike

在 c++11 中,std::unordered_set 容器提供插入重载和新函数 emplace,因此它可以与不可复制构造的键一起使用,例如 std::unique_ptr。

当您想删除其中一个 key 时会发生什么? auto temp = std::move(*some_iterator) 有效吗?是否有一些函数可以让我们同时删除一个元素并将其 move 到临时文件中?

编辑:我试着让它简短​​、甜美和简单,但要更清楚:

  • 是否有迭代器适配器(可能是 move_iterator?)可以让我从容器中 move 元素并删除该迭代器?
  • 如果不是,为什么不呢? future 的 c++ 不应该包含这种接口(interface)吗?

情况似乎是不可能的:您不能在删除 key 之前使它失效,并且在删除它之后您也不能访问它。

最佳答案

对于 std::unordered_set<T>成员(member)emplace()使得物体不需要 move ,或者:你可以emplace()不可 move 的物体放入容器中。

回答问题:你不能std::move() std::unordered_set<T> 中的元素因为元素都是constconst物体不能 move 。当你erase()一个std::unique_ptr<T>来自 std::unordered_set<std::unique_ptr<T>>指向的对象将是 delete d: erase() 时没有接口(interface)让你恢复指针元素。也没有 splice()成员将元素粘贴到另一个容器中,在该容器中可以忽略它,直到需要删除它为止。

关于c++ - 无序集 : remove with move,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21084590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com