Chodzi mi o to - wiemy, że std::mapelementy są posortowane według kluczy. Powiedzmy, że klucze są liczbami całkowitymi. Jeśli wykonam iterację od std::map::begin()do std::map::end()a for, czy standard gwarantuje, że będę konsekwentnie przechodzić przez elementy z kluczami posortowane w kolejności rosnącej?
Przykład:
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;
}
Czy jest to gwarantowane do druku, 234czy jest to zdefiniowana implementacja?
Powód z życia: mam klucz std::mapz intkluczami. W bardzo rzadkich sytuacjach chciałbym powtórzyć wszystkie elementy, z kluczem, większym niż konkretna intwartość. Tak, wygląda na to, że std::vectorbyłby to lepszy wybór, ale zwróć uwagę na moje „bardzo rzadkie sytuacje”.
EDYCJA : Wiem, że elementy std::mapsą posortowane… nie trzeba na to zwracać uwagi (dla większości odpowiedzi tutaj). Napisałem to nawet w swoim pytaniu.
Pytałem o iteratory i kolejność, gdy przechodzę przez kontener. Dzięki @Kerrek SB za odpowiedź.
map::upper_boundaby znaleźć punkt do rozpoczęcia iteracji.