Dans mon code, j'ai un std::unordered_set
et je dois déplacer les données dans un std::vector
. J'utilise le std::unordered_set
lors de l'obtention des données pour garantir que seules des valeurs uniques sont stockées avant la conversion en std::vector
. Ma question est de savoir comment déplacer le contenu vers le std::vector
le plus efficacement? Je n'ai pas besoin du std::unordered_set
après le déplacement des données. J'ai actuellement les éléments suivants:
std::copy(set.begin(), set.end(), std::back_inserter(vector));
Avant C++ 17, le mieux que vous puissiez faire est de:
vector.insert(vector.end(), set.begin(), set.end());
Les éléments de set
sont const
, vous ne pouvez donc pas vous en éloigner - déplacer c'est simplement copier.
Après C++ 17, nous obtenons extract()
:
vector.reserve(set.size());
for (auto it = set.begin(); it != set.end(); ) {
vector.Push_back(std::move(set.extract(it++).value()));
}
Bien que, étant donné votre commentaire selon lequel vos données sont double
s, cela n'a pas d'importance.