有效地将std :: unordered_set的内容移动到std :: vector

时间:2017-02-28 22:24:16

标签: c++ c++11 vector stl copy

在我的代码中,我有一个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));

1 个答案:

答案 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,但这并不重要。