C++ Standard Library C++ STL Library

C++ unordered_multimap - insert() Function



The C++ unordered_multimap::insert function is used to insert new elements in the container. This results into increasing the unordered_multimap size by the number of elements inserted.

Syntax

//single element version 
iterator insert (const value_type& val);
template <class P> pair<iterator,bool> insert (P&& val);

//single element with hint version   
iterator insert (const_iterator position, const value_type& val);
template <class P> iterator insert (const_iterator position, P&& val);

//range version 
template <class InputIterator>
  void insert (InputIterator first, InputIterator last);

//initializer list version 
void insert (initializer_list<value_type> il);

Parameters

position Specify the hint for the position where the element can be inserted.
val Specify the value to be copied (or moved) to the inserted elements.
first Specify the starting position of InputIterator. Copies of the elements in the range [first,last) are inserted in the container.
last Specify the last position of InputIterator. Copies of the elements in the range [first,last) are inserted in the container.
il Specify the initializer_list object.

Return Value

Returns an iterator pointing to newly inserted element in the unordered_multimap.

Time Complexity

  • Single element insertion: Average case - constant i.e, Θ(1). Worst case - linear i.e, Θ(n).
  • Multiple elements insertion: Average case - linear in number of elements inserted. Worst case - quadratic: number of elements inserted multiplied by (container size + 1).

Example:

In the example below, the unordered_multimap::insert function is used to insert elements in the given unordered_multimap.

#include <iostream>
#include <unordered_map>
using namespace std;
 
int main (){
  unordered_multimap<string, string> uMMap;
  unordered_multimap<string, string>::iterator it;

  //populating multimap
  uMMap.insert(pair<string, string>("CAN", "Montreal"));
  uMMap.insert(pair<string, string>("IND", "Mumbai"));
  uMMap.insert(pair<string, string>("USA", "New York"));

  cout<<"uMMap contains: \n ";
  for(it = uMMap.begin(); it != uMMap.end(); ++it)
     cout<<it->first<<"  "<<it->second<<"\n ";

  //insert single element in the multimap 
  uMMap.insert(pair<string, string>("IND", "Delhi"));

  cout<<"\nuMMap contains: \n ";
  for(it = uMMap.begin(); it != uMMap.end(); ++it)
     cout<<it->first<<"  "<<it->second<<"\n ";

  //insert single element with hint in the multimap
  it = uMMap.begin();
  uMMap.insert(it, pair<string, string>("USA", "Washington"));

  cout<<"\nuMMap contains: \n ";
  for(it = uMMap.begin(); it != uMMap.end(); ++it)
     cout<<it->first<<"  "<<it->second<<"\n ";

  return 0;
}

The output of the above code will be:

uMMap contains: 
 USA  New York
 IND  Mumbai
 CAN  Montreal
 
uMMap contains: 
 USA  New York
 IND  Delhi
 IND  Mumbai
 CAN  Montreal
 
uMMap contains: 
 USA  New York
 USA  Washington
 IND  Delhi
 IND  Mumbai
 CAN  Montreal

Example:

A range of elements can also be inserted into a unordered_multimap. Consider the example below.

#include <iostream>
#include <unordered_map>
using namespace std;
 
int main (){
  unordered_multimap<string, string> uMMap1;
  unordered_multimap<string, string> uMMap2;
  unordered_multimap<string, string>::iterator it;

  //populating uMMap1
  uMMap1.insert(pair<string, string>("CAN", "Montreal"));
  uMMap1.insert(pair<string, string>("IND", "Mumbai"));
  uMMap1.insert(pair<string, string>("USA", "New York"));

  //populating uMMap2
  uMMap2.insert(pair<string, string>("IND", "Delhi"));
  uMMap2.insert(pair<string, string>("USA", "Washington"));

  cout<<"uMMap1 contains: \n ";
  for(it = uMMap1.begin(); it != uMMap1.end(); ++it)
     cout<<it->first<<"  "<<it->second<<"\n ";

  //inserts a range of elements from uMMap2 to uMMap1 
  uMMap1.insert(uMMap2.begin(), uMMap2.end());

  cout<<"\nuMMap1 contains: \n ";
  for(it = uMMap1.begin(); it != uMMap1.end(); ++it)
     cout<<it->first<<"  "<<it->second<<"\n ";

  return 0;
}

The output of the above code will be:

uMMap1 contains: 
 USA  New York
 IND  Mumbai
 CAN  Montreal
 
uMMap1 contains: 
 USA  Washington
 USA  New York
 IND  Delhi
 IND  Mumbai
 CAN  Montreal

Example:

Similarly, the initializer list version can be used to insert elements in the given unordered_multimap.

#include <iostream>
#include <unordered_map>
using namespace std;
 
int main (){
  unordered_multimap<string, string> uMMap;
  unordered_multimap<string, string>::iterator it;

  //populating uMMap
  uMMap.insert(pair<string, string>("CAN", "Montreal"));
  uMMap.insert(pair<string, string>("IND", "Mumbai"));
  uMMap.insert(pair<string, string>("USA", "New York"));

  cout<<"uMMap contains: \n ";
  for(it = uMMap.begin(); it != uMMap.end(); ++it)
     cout<<it->first<<"  "<<it->second<<"\n ";

  //insert elements of initializer list into multimap 
  initializer_list<pair<const string, string>> ilist = 
      {{"IND", "Delhi"}, {"USA", "Washington"}};
  uMMap.insert(ilist); 

  cout<<"\nuMMap contains: \n ";
  for(it = uMMap.begin(); it != uMMap.end(); ++it)
     cout<<it->first<<"  "<<it->second<<"\n ";

  return 0;
}

The output of the above code will be:

uMMap contains: 
 USA  New York
 IND  Mumbai
 CAN  Montreal
 
uMMap contains: 
 USA  Washington
 USA  New York
 IND  Delhi
 IND  Mumbai
 CAN  Montreal

❮ C++ <unordered_map> Library