2017-02-28 454 views
0

在我的代码中,我有一个std::unordered_set,我需要将数据移动到std::vector。我在使用std::unordered_set的同时获取数据,以确保在转换为std::vector之前只存储唯一值。我的问题是如何最有效地将内容移动到std::vector?数据移动后我不需要std::unordered_set。目前,我有以下几点:高效地将std :: unordered_set的内容移动到std :: vector

std::copy(set.begin(), set.end(), std::back_inserter(vector)); 
+3

当然'std :: vector :: reserve'会有帮助(如果你没有这样做)。 – LogicStuff

+0

究竟是什么数据? – Yakk

+0

它是数字值。 'std :: vector ' – nalyd88

回答

3

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,这不会有问题。

相关问题