The C++ multimap rbegin function is used to return a reverse iterator referring to the last element of the multimap container.
A reverse iterator of multimap moves in reverse direction and incrementing it until it reaches to the beginning (First element) of the multimap container.
Syntax
reverse_iterator rbegin(); //until C++ 11
const_reverse_iterator rbegin() const; //until C++ 11
reverse_iterator rbegin() nothrow; //since C++ 11
const_reverse_iterator rbegin() const nothrow; //since C++ 11
Parameter
Return value
It returns a reverse iterator pointing to the last element of the multimap.
Complexity
Constant.
Iterator validity
No changes.
Data races
The container is accessed neither the const nor the non-const versions modify the container.
Exception safety
This function never throws exception.
Example 1
Let's see the simple example for rbegin function:
#include <iostream>
#include <map>
using namespace std;
int main ()
{
multimap<char,int> mymultimap;
mymultimap = {
{'a', 100},
{'b', 200},
{'a', 300},
{'c', 300}
};
// show content:
multimap<char,int>::reverse_iterator rit;
for (rit=mymultimap.rbegin(); rit!=mymultimap.rend(); ++rit)
cout << rit->first << " = " << rit->second << '\n';
return 0;
}
Output:
c = 300
b = 200
a = 300
a = 100
In the above example, rbegin function is used to return a reverse iterator pointing to the last element in the mymultimap multimap.
Because multimap stores the elements in sorted order of keys therefore, iterating over a multimap will result in above order i.e. sorted order of keys.
Example 2
Let's see a simple example to iterate over the multimap in reverse order using while loop:
#include <iostream>
#include <map>
#include <string>
#include <iterator>
using namespace std;
int main() {
// Creating & Initializing a multimap of String & Ints
multimap<string, int> multimapEx = {
{ "aaa", 10 },
{ "ddd", 11 },
{ "ccc", 12 },
{ "ccc", 13 }
};
// Create a multimap iterator and point to the end of multimap
multimap<string, int>::reverse_iterator it = multimapEx.rbegin();
// Iterate over the multimap using Iterator till beginning.
while (it != multimapEx.rend()) {
// Accessing KEY from elemencpp tutorialed by it.
string word = it->first;
// Accessing VALUE from elemencpp tutorialed by it.
int count = it->second;
cout << word << " :: " << count << endl;
// Increment the Iterator to point to next entry
it++;
}
return 0;
}
Output:
ddd :: 11
ccc :: 13
ccc :: 12
aaa :: 10
In the above example, we are using while loop to iterate over the multimap in reverse order and rbegin function initializing the last element of the multimap.
Because multimap stores the elements in sorted order of keys therefore, iterating over a multimap will result in above order i.e. sorted order of keys.
Example 3
Let's see a simple example to get the first element of the reversed multimap:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main ()
{
multimap<int,int> m1 = {
{ 1, 10},
{ 2, 20 },
{ 3, 30 },
{ 3, 40 },
{ 4, 50}
};
auto ite = m1.rbegin();
cout << "The first element of the reversed multimap m1 is: ";
cout << "{" << ite->first << ", "
<< ite->second << "}\n";
return 0;
}
Output:
The first element of the reversed multimap m1 is: {4, 50}
In the above example, rbegin function returns the first element of the reversed multimap m1 i.e. {4,50}.
Example 4
Let's see a simple example to sort and calculate the highest marks:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main ()
{
multimap<int,int> marks = {
{ 425, 10},
{ 300, 20 },
{ 480, 30 },
{ 300, 40 },
{ 425, 50 }};
cout << "Marks" << " | " << "Roll Number" << '\n';
cout<<"______________________\n";
multimap<int,int>::reverse_iterator rit;
for (rit=marks.rbegin(); rit!=marks.rend(); ++rit)
cout << rit->first << " | " << rit->second << '\n';
auto ite = marks.rbegin();
cout << "\nHighest Marks is: "<< ite->first <<" \n";
cout << "Roll Number of Topper is: "<< ite->second << "\n";
return 0;
}
Output:
Marks | Roll Number
______________________
480 | 30
425 | 50
425 | 10
300 | 40
300 | 20
Highest Marks is: 480
Roll Number of Topper is: 30
In the above example, a multimap marks is implemented where the Roll Number is being stored as value and marks as key. This enables us to take advantage of the auto sorting in multimaps and lets us to identify the Roll number of the element with the highest marks.