我有两个集合和一个指向 a
元素的迭代器:
set<unique_ptr<X>> a, b;
set<unique_ptr<X>>::iterator iter = find something in a;
我想从a
中删除iter
所指向的元素,并将其插入到b
中。这是否可能? 如何实现?
我有两个集合和一个指向 a
元素的迭代器:
set<unique_ptr<X>> a, b;
set<unique_ptr<X>>::iterator iter = find something in a;
我想从a
中删除iter
所指向的元素,并将其插入到b
中。这是否可能? 如何实现?
嗯,我怀疑没有正常的方法来做到这一点。但总有一种非正常的方法 :) 你可以按照以下步骤进行:
auto tmp = const_cast<std::unique_ptr<std::string>&&>(*iter);
a.erase(iter);
b.insert(std::move(tmp));
好的,第一行违反了set
不变量,这很糟糕,但据我所知,这不应该是一个问题,因为在下一行我们就将这个恶意节点从集合中删除了。
a
移动到tmp
,在擦除时,集合a
包含“已移动”的unique_ptr
对象。 - ixSciset
不变量,以至于我无法确定每个rb-tree实现在违规节点被删除后是否会产生有序的rb-tree... 看来这是不可能的... - Yakov Galka
const
的问题,你呢? - edmz