In this article we will discuss how to iterate a map in reverse order.

Map store the elements in sorted order of keys. For example, if you store following elements in map i.e.

```{"aaa", 10},
{"ddd", 11},
{"bbb", 12},
{"ccc", 13}```

It will internally store the elements in sorted order of keys i.e.
```{"aaa", 10},
{"bbb", 12},
{"ccc", 13},
{"ddd", 11},```

Iterating over a map will result in above order i.e. sorted order of keys. Now what if we want to iterate a map in reverse direction ?

## Iterating a map in reverse order

To Iterate a map in reverse order we will use reverse_iterator of map i.e.

### Reverse Iterator

`std::map<std::string, int>::reverse_iterator`

Reverse Iterator of map moves in backward direction on increment. So, we will point the reverse_iterator to the last element of map and then keep on incrementing it until it reaches the first element. To do this we will use 2 member functions of std::map i.e.

### std::map::rbegin()

`reverse_iterator rbegin();`

It returns the reverse_iterator pointing to last element of map.

### std::map::rend()

`reverse_iterator rend();`

It returns the reverse_iterator pointing to first element of map.

Now, to loop back in reverse direction on a map. Iterate over the range b/w rbegin() & rend() using reverse_iterator.

Checkout complete example as follows,

```#include <iostream>
#include <map>
#include <string>
#include <iterator>

int main() {

// Creating & Initializing a map of String & Ints
std::map<std::string, int> mapOfWordCount = {
{ "aaa", 10 },
{ "ddd", 11 },
{ "bbb", 12 },
{ "ccc", 13 }
};

// Create a map iterator and point to the end of map
std::map<std::string, int>::reverse_iterator it = mapOfWordCount.rbegin();

// Iterate over the map using Iterator till beginning.
while (it != mapOfWordCount.rend()) {
// Accessing KEY from element pointed by it.
std::string word = it->first;

// Accessing VALUE from element pointed by it.
int count = it->second;

std::cout << word << " :: " << count << std::endl;

// Increment the Iterator to point to next entry
it++;
}

return 0;
}
```

Output:
```ddd :: 11
ccc :: 13
bbb :: 12
aaa :: 10```

To compile the above code on linux. Use following command,

g++ -std=c++11 example.cpp