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

nal*_*d88 7 c++ stl copy vector c++11

在我的代码中,我有一个std::unordered_set,我需要将数据移动到std::vector.我正在使用std::unordered_setwhile获取数据以确保在转换为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)

虽然您的评论是您的数据是doubles,但这并不重要.

  • @BRabbit27 如前所述,集合仅公开对元素的 const 访问。移动=复制。 (3认同)