111 votes

c ++ back_inserter pour un ensemble?

Je suppose que c'est une question simple. J'ai besoin de faire quelque chose comme ça:

 std::set<int> s1, s2;
s1 = getAnExcitingSet();
transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor());
 

Bien sûr, back_inserter ne fonctionne pas car il n'y a pas de push_back. std::inserter également besoin d'un itérateur? Je n'ai pas utilisé d'inséreuse, je ne sais donc pas quoi faire. est-ce que quelqu'un a une idée?

Bien sûr, mon autre option est d’utiliser un vecteur pour s2, puis de le trier plus tard. Peut-être que c'est mieux?

159voto

Johannes Schaub - litb Points 256113

set n'a pas push_back car la position d'un élément est déterminée par le comparateur de l'ensemble. Utilisez std::inserter et transmettez-le .begin() :

 std::set<int> s1, s2;
s1 = getAnExcitingSet();
transform(s1.begin(), s1.end(), 
          std::inserter(s2, s2.begin()), ExcitingUnaryFunctor());
 

L'itérateur d'insertion appellera alors s2.insert(s2.begin(), x)x est la valeur transmise à l'itérateur lors de son écriture. L'ensemble utilise l'itérateur comme indice pour insérer. Vous pouvez aussi bien utiliser s2.end() .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X