web-dev-qa-db-ja.com

std :: unordered_setのコンテンツをstd :: vectorに効率的に移動する

私のコードには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));
11
nalyd88

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()));
}
_

あなたのデータはdoublesであるというコメントを与えられましたが、これは問題ではありません。

15
Barry