unordered map stl c++ code example
Example 1: map vs unordered_map in 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.
Example 2: hashmap in cpp
#include <unordered_map>
#include <iostream>
int main()
{
std::unordered_map<std::string, int> age;
age["Michael"] = 16;
age.insert(std::pair<std::string, int>{"Bill", 25});
age.insert({"Chris", 30});
age["Michael"] = 18;
age.at("Chris") = 27;
std::string query;
query = "Eric";
if (age.find(query) == age.end())
{
std::cout << query << " is not in the dictionary!" << std::endl;
}
query = "Michael";
if (age.find(query) == age.end())
{
std::cout << query << " is not in the dictionary!" << std::endl;
}
age.erase(query);
if (age.find(query) == age.end())
{
std::cout << query << " is not in the dictionary!" << std::endl;
}
for (const std::pair<std::string, int>& tup : age)
{
std::cout << "Name: " << tup.first << std::endl;
std::cout << "Age: " << tup.second << std::endl;
}
}
Example 3: header file for unordered_map in c++
#include<unordered_map>
Example 4: unordered_map c++
#include <bits/stdc++.h>
#include <iostream>
#include <map>
#include <unordered_map>
using namespace std;
int main() {
map<char, int> M;
unordered_map<char, int> U;
string s = "Sumant Tirkey";
for (char c : s) {
M[c]++;
}
for (char c : s){
U[c]++;
}
return 0;
}