在我的代码中,我有一个std::unordered_set
,我需要将数据移动到std::vector
。我在获取数据时使用std::unordered_set
以确保在转换为std::vector
之前仅存储唯一值。我的问题是如何将内容最有效地移动到std::vector
?移动数据后,我不需要std::unordered_set
。我目前有以下内容:
std::copy(set.begin(), set.end(), std::back_inserter(vector));
答案 0 :(得分:9)
在C ++ 17之前,你能做的最好的是:
vector.insert(vector.end(), set.begin(), set.end());
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()));
}
虽然您的评论是double
s,但这并不重要。