Question

Puisqu'il n'y a pas de fonction membre .resize () dans C ++ std :: map, je me demandais comment on peut obtenir un std :: map avec au plus n éléments.

La solution évidente consiste à créer une boucle de 0 à n et à utiliser le nième itérateur comme premier paramètre pour std :: erase ().

Je me demandais s'il existe une solution qui n'a pas besoin de la boucle (du moins pas dans mon code d'utilisateur) et qui est davantage "le chemin à parcourir de la STL".

Était-ce utile?

La solution

Vous pouvez utiliser std :: advance (iter, numberofsteps) pour cela.

Autres conseils

Solution universelle pour presque tous les conteneurs, tels que std :: list, std :: map, boost :: multi_index. Vous devez uniquement vérifier la taille de votre carte.

template<class It>
It myadvance(It it, size_t n) {
   std::advance(it, n);
   return it;
}

template<class Cont>
void resize_container(Cont & cont, size_t n) {
    cont.erase(myadvance(cont.begin(), std::min(n, cont.size())), 
                 cont.end());
}

Pour ce faire, utilisez std :: advance. Mais voici une manière amusante (lente) permettant d’utiliser le redimensionnement sur la carte. Plus généralement, ce genre d’astuce peut être utilisée pour d’autres choses travaillant sur des vecteurs mais pas sur des cartes.

map<K,V> m; //your map
vector< pair<K,V> > v(m.begin(), m.end());
v.resize(n);
m = map<K,V>(v.begin(),v.end());

Un std :: map n'est pas une liste. Il n'y a pas de "premier n" éléments.

BTW: les itérateurs deviennent invalides si le conteneur est modifié.

Si vous avez vraiment besoin d'une plus petite carte, vous pouvez la parcourir et ajouter tous les éléments jusqu'au nième ème rang dans une nouvelle carte.

Pourquoi voudriez-vous redimensionner une carte?

Les éléments d'une carte ne sont stockés dans aucun ordre - le premier 'n' ne veut vraiment rien dire

modifier:
Il est intéressant de noter que std :: map a un ordre, et que l’utilité de ce concept est incertaine.
Les entrées sont-elles dans le même ordre de tri que les clés?
Qu'est-ce que ça veut dire? Si vous avez des noms saisis par SSN, cela signifie-t-il que les noms sont stockés dans l'ordre numérique SSN?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top