nal*_*d88 7 c++ stl copy vector c++11
在我的代码中,我有一个std::unordered_set
,我需要将数据移动到std::vector
.我正在使用std::unordered_set
while获取数据以确保在转换为a之前仅存储唯一值std::vector
.我的问题是如何std::vector
最有效地移动内容?std::unordered_set
移动数据后我不需要.我目前有以下内容:
std::copy(set.begin(), set.end(), std::back_inserter(vector));
Run Code Online (Sandbox Code Playgroud)
Bar*_*rry 11
在C++ 17之前,你能做的最好的事情是:
vector.insert(vector.end(), set.begin(), set.end());
Run Code Online (Sandbox Code Playgroud)
这些set
元素是const
,所以你不能从它们移动 - 移动只是复制.
在C++ 17之后,我们得到extract()
:
vector.reserve(set.size());
for (auto it = set.begin(); it != set.end(); ) {
vector.push_back(std::move(set.extract(it++).value()));
}
Run Code Online (Sandbox Code Playgroud)
虽然您的评论是您的数据是double
s,但这并不重要.