是否可以将项目移出std :: set?

时间:2014-08-26 21:17:32

标签: c++ c++11

如果我有一个只允许只移动语义的对象 - 是否可以从一个集合中移动项目?我似乎找不到办法来做到这一点。

2 个答案:

答案 0 :(得分:9)

不,这是不可能的。无法对set中的元素进行非const访问,并且移动需要非const引用。允许非const访问会使打破set的不变量变得非常容易。

答案 1 :(得分:5)

C ++ 17添加了一个函数std::set<>::extract,该函数允许将对象移出集合:

std::set<MoveOnlyType> s;
s.emplace(arg0, arg1, arg2); // only way to insert such move-only objects, since C++11
auto internal_node = s.extract(s.begin()); // internal_node no longer part of set, we can do with it what we want
MoveOnlyType m = std::move(internal_node.value()); // finally get the actual object out