2017-02-28 33 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秒であることをあなたのコメントを考えると、これは問題ではないだろうが。

関連する問題