C ++: STL multimap.equal_range ()

I have this code, and I cannot figure out where the equal_range method returns iterators. I know that a range is a couple object with two multimap objects inside, but what I do not get is why there exists 'for (it = range.first; it != range.second; ++it)' - what does this mean?

 // multmap.cpp -- use a multimap #include <iostream> #include <string> #include <map> #include <algorithm> typedef int KeyType; typedef std::pair<const KeyType, std::string> Pair; typedef std::multimap<KeyType, std::string> MapCode; int main() { using namespace std; MapCode codes; codes.insert(Pair(415, "San Francisco")); codes.insert(Pair(510, "Oakland")); codes.insert(Pair(718, "Brooklyn")); codes.insert(Pair(718, "Staten Island")); codes.insert(Pair(415, "San Rafael")); codes.insert(Pair(510, "Berkeley")); cout << "Number of cities with area code 415: " << codes.count(415) << endl; cout << "Number of cities with area code 718: " << codes.count(718) << endl; cout << "Number of cities with area code 510: " << codes.count(510) << endl; cout << "Area Code City\n"; MapCode::iterator it; for (it = codes.begin(); it != codes.end(); ++it) cout << " " << (*it).first << " " << (*it).second << endl; pair<MapCode::iterator, MapCode::iterator> range = codes.equal_range(718); cout << "Cities with area code 718:\n"; for (it = range.first; it != range.second; ++it) //<------------------ here cout << (*it).second << endl; return 0; } 
+7
source share
3 answers

Iterators in pairs define a range of elements with keys equal to what you searched for in the [range.first, range.second) .

This means that to iterate over this range, you start with range.first and advance the iterator until you reach range.second , which means that you have just moved away from the equal range. Conceptually, this is the same as navigating the range [container.begin(), container.end()) .

+11
source

The result of equal_range , namely your range object, is a pair of two iterators [beginning-of-range, end-of-range) . So you want to iterate over [range.first, range.second) :

 auto range = m.equal_range(4); +---+---+---+---+---+---+---+---+---+ | 2 | 3 | 3 | 4 | 4 | 4 | 4 | 5 | 6 | =: m +---+---+---+---+---+---+---+---+---+ ^ ^ | | range.first range.second 
+24
source

equal_range returns a pair of iterators i1, i2 , so that all elements in the range [i1, i2) have the same key. Therefore, to repeat all cities with the code 718, you call equal_range , and then iterate from the returned pair first to the returned pair second .

+4
source

All Articles