2 votes

copier le conteneur MAP à la fin de X

Supposons que m a le type map<int, string> et nous rencontrons un appel à

copy(m.begin(), m.end(), back_inserter(x)) .

Que peut-on dire du type de x ?

Veuillez me donner un exemple si copy(m.begin(), m.end(), back_inserter(x)) serait légal. Merci de votre compréhension.

2voto

John Zwinck Points 43636

Que peut-on dire du type de x ?

On peut le dire :

  • m.value_type es pair<const int, string> , de sorte que la même chose est probablement vrai de x.value_type (pas strictement nécessaire, mais conventionnel en STL).
  • x.push_back(value_type) doit être valide, car back_inserter(x) pour travailler.

En d'autres termes, la seule exigence concernant les x est qu'il prend en charge les éléments suivants :

x.push_back(pair<const int, string>());

Ce que fait réellement cette fonction n'a pas d'importance, mais elle doit porter ce nom et prendre en charge ce type d'argument.

1voto

Serge Voloshenko Points 1303

Merci à tous ! Voici mon exemple

map<int, string> m;         // 'm' is associative container with type map<int, string> 

m[1] = "Serge";
m[2] = "Iulia";

// 'back_inserter(x))' can be used for the container, so 'x' is a vector of pair
vector < pair<int, string> > x;

copy(m.begin(), m.end(), back_inserter(x));

// display vector of pair 'x'
cout << "vector <pair<int, string> > x" << endl;
for (vector<pair<int, string> >::const_iterator iter = x.begin(); iter != x.end(); ++iter) {
    cout << iter->first << " " << iter->second <<  endl;
}

0voto

Michael Albers Points 3212

X doit être un type de conteneur. back_inserter renvoie un itérateur utilisé pour ajouter des éléments à la fin du conteneur passé en paramètre. Voir std::back_inserter .

back_inserter n'est pas légale pour les std::map . Le type de conteneur donné en paramètre doit prendre en charge push_back qui std::map ne le fait pas. Pour s'en convaincre : http://ideone.com/b2t2iN

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