unordered_map c++
| map | unordered_map
---------------------------------------------------------
Ordering | increasing order | no ordering
| (by default) |
Implementation | Self balancing BST | Hash Table
| like Red-Black Tree |
search time | log(n) | O(1) -> Average
| | O(n) -> Worst Case
Insertion time | log(n) + Rebalance | Same as search
Deletion time | log(n) + Rebalance | Same as search
::-> Use std::map when
1. You need ordered data.
2. You would have to print/access the data (in sorted order).
3. You need predecessor/successor of elements.
::-> Use std::unordered_map when
1. You need to keep count of some data (Example – strings) and no ordering is required.
2. You need single element access i.e. no traversal.
// C++ program to demonstrate functionality of unordered_map
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
// Declaring umap to be of <string, int> type
// key will be of string type and mapped value will
// be of double type
unordered_map<string, int> umap;
// inserting values by using [] operator
umap["GeeksforGeeks"] = 10;
umap["Practice"] = 20;
umap["Contribute"] = 30;
// Traversing an unordered map
for (auto x : umap)
cout << x.first << " " << x.second << endl;
}
#include <bits/stdc++.h>
#include <iostream>
#include <map>
#include <unordered_map>
using namespace std;
int main() {
map<char, int> M; //based on balanced binary tree takes O(logn) access time
unordered_map<char, int> U; //uses hashing and accessing elements takes O(1)
//U.add(key,value);
//U.erase(key,value);
//map each letter to their occurance
string s = "Sumant Tirkey";
for (char c : s) {
M[c]++;
}
for (char c : s){
U[c]++;
}
return 0;
}