C++ Tutorial Index

C++ Tutorial C++ History C++ Installation C++ First Program C++ cin and cout C++ Data type C++ Variable C++ operator C++ Keywords

C++ Control Statements

C++ If C++ Nested if C++ If-else C++ If-else-if C++ Switch C++ Break C++ Continue C++ Goto C++ For loop C++ While loop C++ Do while loop

C++ Functions

C++ Call by Value C++ Call by Reference C++ Recursion Function C++ Inline function C++ Friend function

C++ Arrays

Single dimension array Two dimension array

C++ Strings

C++ Strings

C++ Inheritance

C++ Inheritance Single level Inheritance Multilevel Inheritance Multiple Inheritance Hierarchical Inheritance Hybrid Inheritance

C++ Polymorphism

C++ Polymorphism C++ Overloading C++ Overriding C++ Virtual Function

C++ Pointers

C++ Pointers C++ this pointer

C++ Exception Handling

C++ Exception Handling

C++ Constructors

C++ Constructors Default Constructor Parameterize Constructor Copy constructor Constructor Overloading Destructor

C++ File Handling

C++ File Handling C++ Writing to file C++ Reading file C++ Close file

Miscellaneous

C Vs C++ C++ Comments C++ Data Abstraction C++ Identifier C++ Memory Management C++ Storage Classes C++ Void Pointer C++ Array To Function C++ Expressions C++ Features C++ Interfaces C++ Encapsulation std::min in C++ External merge sort in C++ Remove duplicates from sorted array in C++ Precision of floating point numbers Using these functions floor(), ceil(), trunc(), round() and setprecision() in C++ C++ References C++ Friend Functions C++ Mutable keyword Unary Operators in C++ Initialize Array of objects with parameterized constructors in C++ Differences between #define & const in C/C++ C++ Program to Implement Shell Sort C++ Program to Implement Merge Sort Storage Classes in C Vector resize() in C++ Passing by Reference Vs. Passing by the pointer in C++ Free vs delete() in C++ goto statement in C and C++ C++ program to read string using cin.getline() C++ String Concatenation Heap Sort in C++ Swap numbers in C++ Input Iterators in C++ Fibonacci Series in C++ C ++ Program: Alphabet Triangle and Number Triangle C++ Program: Matrix Multiplication C++ Program to Print Fibonacci Triangle Stack in C++ Maps in C++ Queue in C++ C++ Bitset C++ Algorithms Priority Queue in C++ C++ Multimap C++ Deque Function Pointer in C++ Sizeof() Operators in C++ C++ array of Pointers free() Vs delete in C Timsort Implementation Using C++ CPP Templates C++ Aggregation C++ Enumeration C++ Math Functions C++ Object Class C++ Queue Initialize Vector in C++ Vector in C++ C++ STL Components Function overloading in C++ C++ Maximum Index Problem C++ find missing in the second array C++ Program to find the product array puzzle C++ Program To Find Largest Subarray With 0 Sum C++ Program To Move All Zeros To The End Of The Array C++ Program to find the element that occurs once C++ Program to find the largest number formed from an array Constructor Vs Destructor C++ Namespaces C++ OOPs Concept C++ Static C++ Structs C++ Try-Catch C++ User Defined Exceptions C++ Virtual Destructor C++ vs C# Malloc() and new in C++ Palindrome Number Program in C++ Snake Code in C++ Splitting a string in C++ Structure Vs Class in C++ Virtual Function Vs Pure Virtual Function C++ Bidirectional Iterators C++ Forward Iterators C++ Iterators C++ Output Iterators C++ Range-based For Loop Converting string into integer in C++ LCM Program in C++ Type conversion in C++ Add two numbers using the function in C++ Advantage and disadvantage friend function C++ Armstrong Number Program in C++ ATM machine program in C++ using functions Binary to Decimal in C++ Bit Manipulation in C++ C++ Constructor C++ Dijkstra Algorithm Using the Priority Queue C++ int into String C++ Signal Handling Decimal to Binary in C++ Decimal to Hexadecimal in C++ Decimal to Octal in C++ Factorial Program in C++ Function in C++ Hexadecimal to Decimal in C++ Octal to Decimal in C++ Reverse a Number in C++ Structure Vs Class in C++ C++ Forward Iterators C++ Output Iterators C++ Prime number program Constructor Overloading in C++ Different Ways to Compare Strings in C++ Program to convert infix to postfix expression in C++ SET Data Structure in C++ Upcasting and Downcasting in C++ Reverse an Array in C++ Fast Input and Output in C++ Delete Operator in C++ Copy elision in C++ C++ Date and Time C++ Bitwise XOR Operator Array of sets in C++ Binary Operator Overloading in C++ Binary Search in C++ Implementing the sets without C++ STL containers Scope Resolution Operator in C++ Smart pointers in C++ Types of polymorphism in C++

C++ Multimap

Definition:

In C++, a multimap is similar to a map with the additional concept, where multiple elements possess the same keys. It is also not necessary that the key values and mapped values must be unique. The scenario is different in the case of multimaps. In a multimap, keys are always found in sorted order. This ordered property makes it difficult for competitive programmers to implement multimaps.

Moreover, multi maps are associative containers that are formed by combining key-value and mapped value, which is usually sorted or is in a specific order. Elements in multimap may sometimes have equivalent keys.

A multimap has key values, which are generally used to sort and uniquely identify elements, and the mapped values store the definitions or function related to this key. Some differences in the key and mapped value may exist, which later is grouped forming pairs by combining both.

Syntax

typedef pair<const Key, T> value_type;

Here,

     Key: It identifies each element by key value. Keys can be different.

     T: It identifies each element by mapped value. Mapped values may be different.

There are various functions associate with mulimaps. Some of them are as follows:

  1. begin() – It returns first element from the container while iteration.
  • end() – It returns the last element from the container while iteration.
  • size() – It returns the size or say number of elements present.
  • max_size() – It returns maximum number of elements an iterator can hold.
  • empty() – checks whether multimap is empty.
  • pair<int,int> insert(keyvalue,multimapvalue) – It is used to insert new elements in the multimap.

There are still plenty of such functios present the C++ STL . We may now see some basic coding examples and algorithms working behind it.

 #include <string.h>
 #include <iostream>
 #include <map>
 #include <utility>
 using namespace std;
 int main()
 {
    map<int, string> Professors;
    Professors[500] = "M. Chinnaswami";
    Professors[200] = "Venugopal Iyyer";
    Professors[350] = "Trichipalli Parampir";
    Professors[600] = "Mutthuswami Iyer";
    Professors[230] = "Rajshekhara Shriniwasana";
    cout << "Professors[500]=" << Professors[5000] << endl << endl;
    cout << "Size of the map: " << Professors.size() << endl;
    cout << endl << "Original Order:" << endl;
    for( map<int,string>::iterator ii=Professors.begin(); ii!=Professors.end(); ++ii)
    {
        cout << (*ii).first << ": " << (*ii).second << endl;
   }
    cout << endl << "Reversed order:" << endl;
    for(map<int,string>::reverse_iterator ii=Professors.rbegin(); ii!=Professors.rend(); ++ii)
   {
        cout << (*ii).first << ": " << (*ii).second << endl;
   }
 } 

Output:

C++ Multimap

Explanation:

The above code explains how to map the key values associated with multimap. In the above code, we have taken arguments in the two forms i.e. integer and string to assign keys of Professors. We can visualize the output. Once the mapped values are sorted in ascending order and later in descending order, it gives us the idea that the mapped and key values can highly be useful for the data present in the form of arrays where we want to find the redundant values associated with them.

Note: The defined map provides a comparison operator in the map declaration to order the indexes. It provides a default comparison for the data type. In the example above, we can see that the key type is an integer with (=) operator and (<) operator can easily operate.

Let’s us now take a straight forward look to the other functions present through the data table below.

        Functions          Descriptions
       constructorIt constructs multimap.
       destructorIt destroys/removes multimap.
Iterators (cbegin, cend, rbegin, rend,crbegin, crend)These functions manipulate the multimap using iterators from beginning to end and also in reversee order.
Capacity (empty, size and max_size)These functios check size, maximum size and elements present or not.
        Modifiers (erase, insert, clear, swap, emplace)These functions are used to erase, insert, remove or clear, exchange or insert new elements by hint.
Observers (key_comp, value_comp)Return copy of key comparison and value comparison.
       Allocator (get_allocator)Returns allocator used to construct the multimap.
      Operations (count, upper_bound,lower_bound, find, equal_range)Returns the element and the iterator with keys, counts, value of upper and lower bounds and matches elements with given key.

Advantages of using Multimap

The advantages are listed below:

  1. It is comfortable to run through a multimap with iterators rather than using nested for-loop for the map and vector case.
  • Once we had inserted a value into the multimap, we know that the iterator would remain valid until we remove it. This is a very strong property; we can't have it with the map of vectors.
  • The value once inserted into a multimap remains valid until we remove it which is an added advantage over preferring a map of vectors.
  • In multimap, to get elements of a key and map of vectors we simply use [] operator and can have a vector of elements.



ADVERTISEMENT
ADVERTISEMENT