C++ Map


title: Map

Introduction of map

map is an associative container that store elements in key-value pair. Just like in Java we have collection, associative array in PHP and so on.

Benefits of using map

  • It stores only unique keys and that too in sorted order based on its assigned sorting criteria.
  • As keys are in sorted order therefore searching element in map through key is very fast i.e. it takes logarithmic time.
  • In map there will be only one value attached with the every key.
  • map can be used as associative arrays.
  • It might be implemented using balanced binary trees.

Here is an example:

#include <iostream> #include <map> using namespace std; int main (){ map<char,int> first; //initializing first['a']=10; first['b']=20; first['c']=30; first['d']=40; map<char, int>::iterator it; for(it=first.begin(); it!=first.end(); ++it){ cout << it->first << " => " << it->second << '\n'; } return 0; }

Output:

a => 10 b => 20 c => 30 d => 40

Creating map object

map<string, int> myMap;

Get Size

Get size of map with size function

map<int, int > myMap; myMap[100] = 3 count << "size of map is " << myMap.size() << '\n';

Output:

size of map is 1

Insertion

Inserting data with insert member function.

myMap.insert(make_pair("earth", 1)); myMap.insert(make_pair("moon", 2));

We can also insert data in std::map using operator [] i.e.

myMap["sun"] = 3;

If “sun” is already mapped before, this action will override the value mapped to key.

Erase

Erasing data with erase function

map<int, int > myMap; myMap[10] = 1000; cout << "before erase, size of map is " << myMap.size() << '\n'; myMap.erase(10); cout << "after erase, size of map is " << myMap.size() << '\n';

Output:

before erase, size of map is 1 after erase, size of map is 0

Accessing map value

To access map values, simply call Map[key]. For example:

map<string, int > M; M["abc"] = 1; M["def"] = 2; cout << "value of abc is " << M["abc"] << '\n'; cout << "value of def is " << M["def"] << '\n';

Output:

value of abc is 1 value of def is 2

Accessing map elements

To access map elements, you have to create iterator for it. Here is an example as stated before.

map<char, int>::iterator it; for(it=first.begin(); it!=first.end(); ++it){ cout << it->first << " => " << it->second << '\n'; }

N.B: All code in example are in C++11 version. You can learn more about C++ version Here

Unordered Map

There exists another associative container similar to map, named unordered_map, which is implemented using a Hash Table as opposed to a balanced binary tree as is the case with map. The key values of the unordered_map are hashed into indices of the hash table. Unlike map the elements of unordered_map are not stored in a sorted manner. All operations permissible on map are applicable to unordered_map as well.

Benefits of Unordered Map

  • Average Cost of insert, delete, search is O(1) if there are no hash collisions.
  • Implemented using Hash Table

Unordered Map vs Map

  • Unordered Map is faster if you want single element access.
  • Use map when you want to traverse through key values in a sorted fashion or if you want some kind of ordering in the map.
  • Unordered Map has more memory overhead, although it is typically negligible.

References:

For more information about the differences between map and unordered_map: Map vs Unordered Map

This article needs improvement. You can help improve this article. You can also write similar articles and help the community.