在集之间移动`unique_ptr`

ybu*_*ill 7 c++ containers unique-ptr

我有两个集合和一个元素的迭代器a:

set<unique_ptr<X>> a, b;
set<unique_ptr<X>>::iterator iter = find something in a;
Run Code Online (Sandbox Code Playgroud)

我想删除iterfrom 指向的元素a并将其插入b.可能吗?怎么样?

ixS*_*Sci 2

好吧,我怀疑没有正常的方法可以做到这一点。但总有一种不正常的情况:) 您可以执行以下操作:

auto tmp = const_cast<std::unique_ptr<std::string>&&>(*iter);
a.erase(iter);
b.insert(std::move(tmp));
Run Code Online (Sandbox Code Playgroud)

好吧,第一行违反了set不变式,这很可怕,但据我了解,这不应该成为问题,因为在下一行我们从集合中删除了这个邪恶的节点。

  • 好吧,这严重违反了“set”不变量,以至于我无法确定每个 rb-tree 实现*在*擦除违规节点后都会产生一个有序的 rb-tree...我猜这是不可能的... (2认同)