Est de l'ordre de l'itération sur les std::map connu (et garanti par la norme)?

Ce que je veux dire est - on sait que le std::map's éléments sont triés en fonction de clés. Donc, disons que les clés sont des nombres entiers. Si je itération de std::map::begin() à std::map::end() à l'aide d'un for, la norme garantie que je vais effectuer une itération, par conséquent, à travers les éléments avec des touches, triés dans l'ordre croissant?


Exemple:

std::map<int, int> map_;
map_[1] = 2;
map_[2] = 3;
map_[3] = 4;
for( std::map<int, int>::iterator iter = map_.begin();
     iter != map_.end();
     ++iter )
{
    std::cout << iter->second;
}

Est-ce garanti pour imprimer 234 ou est-il de la mise en œuvre définies?


La vie réelle raison: j'ai un std::map avec int clés. Dans de très rares situations, j'aimerais parcourir tous les éléments, avec la clé, supérieure à celle d'un béton int valeur. Yep, ça sonne comme std::vector serait le meilleur choix, mais à mon avis "très rares sont les situations".


MODIFIER: je sais, que les éléments de std::map sont triés.. pas besoin de le signaler (pour la plupart des réponses ici). J'ai même écrit dans ma question.

Je posais des questions sur les itérateurs et l'ordre quand je suis itération dans un récipient. Merci @Kerrek SB pour la réponse.

  • Dans le cas où vous ne le saviez pas: dans votre vie réelle utilisation vous pouvez utiliser map::upper_bound pour trouver le point de départ de l'itération.
  • Je le sais et je sais exactement où je l'avais commencer à répéter. J'ai juste erré si la commande est garantie.
  • Un clairsemée vecteur ne serait pas raisonnable si vos clés (indices numériques) varient énormément à travers le conseil d'administration. Je suis à l'aide d'une solution similaire pour lequel l'index numérique représente un Cartésien coordonnée dans un espace à 3 dimensions. À l'aide d'un vecteur dans ce scénario permettrait d'augmenter ma mémoire, par gigaoctets. Donc, je ne pense pas que le vecteur est une panacée ici, loin de là.
  • Je ne comprends pas la question, et je vais vous expliquer pourquoi, grâce à une pensée de l'expérience. Si vous savez déjà que les éléments sont ordonnés, comment pourrait-itération ne pas être? Que fait la commande de dire que, si elle ne s'applique pas à l'itération? Quels sont les autres cas, il a où l'importance de l'ordre, est détectable, etc.? (La réponse a été donnée par Konstantin.)
InformationsquelleAutor Kiril Kirov | 2011-10-04