5

I have a std::multimap on which I am iterating using a forward iterator.

std::multimap<int,char>::iterator it;
for(it=map.begin();it!=map.end();++it) {
    // do something
}

Now I need to treat the first element differently and start iterating from the second element of the map. How do I do that?

ACC
  • 2,488
  • 6
  • 35
  • 61

5 Answers5

12
std::multimap<int,char>::iterator it;

for(it = std::next(map.begin()); it != map.end(); ++it) {
    // do something
}

This is C++11 only. You'll need to include <iterator>.

The other option is obvious, but less pretty:

it = map.begin();
++it;
for(; it != map.end(); ++it) {
    // do something
}

Take a look at std::advance, too.

jrok
  • 54,456
  • 9
  • 109
  • 141
6

Seems it looks shorter

it = ++map.begin(); 
ЯegDwight
  • 24,821
  • 10
  • 45
  • 52
Tomas
  • 176
  • 3
2
std::multimap<int,char>::iterator it = map.begin();
//treat it here
++it
for(;it!=map.end();++it) {

}
Vinícius
  • 15,498
  • 3
  • 29
  • 53
1
for(bool First=true, it=map.begin();it!=map.end();++it) {
    if (First) { do something; First=false; }
    else { do something else; }
}

or, if you prefer:

iterator it=map.begin();
if (it!=map.end()) { do something; ++it; }
for (; it!=map.end(); ++it) { do something }
Christian Stieber
  • 9,954
  • 24
  • 23
1

Change it = map.begin() in the for-initializer to it = map.begin(), ++it.

Pete Becker
  • 74,985
  • 8
  • 76
  • 165