Frequency of each character in a string using unordered_map in C++
We will find frequency of each character using an unordered_map in C++.
Unordered Map are associative containers that are used to store elements formed by the combinations of mapped value and key-value.
It helps in fast retrieval of individual elements using their key value.
The elements of unordered_map are unsorted internally but are organized using the hash values.
Examples
Input : "ILoveProgramming"
Output:
m 2n 1a 1g 2P 1r 2e 1i 1v 1o 2L 1I 1
How to follow up:
- Iterate through the input string.
- If the character is present in
unordered_mapinsert the value of the character with the corresponding integer value as 1. - If already present then increase the integer value of that character.
for(int i = 0; i < s.size(); i++){ if(mp.find(s[i]) == mp.end()){ mp.insert(make_pair(s[i], 1)); }else{ mp[s[i]]++; } } - Finally print frequency of all the elements by traversing through the map.
Alternate Approach (Direct):
- In
unordered_mapint value is initially assigned value 0 so you can directly increase the value without checking if it’s present inunordered_mapor not.for(char x : s){ mp[x]++; }
Full implementation:
//author @Nishant
#include<bits/stdc++.h>
using namespace std;
// Function to find character frequency of the string
void printCharFreq(string s);
int main(){
string s;
// If you want to take input on runtime
// cin >> s;
s = "CodeSpeedy";
printCharFreq(s);
return 0;
}
void printCharFreq(string s){
// Declaring an unordered Map
unordered_map<char, int> mp;
// Basic approach is check if the
// character is present in map
// then set its corresponding int value to 1
// if already exist then increment the value.
for(int i = 0; i < s.size(); i++){
if(mp.find(s[i]) == mp.end()){
mp.insert(make_pair(s[i], 1));
}else{
mp[s[i]]++;
}
}
// Other Approach is directly update
// corresponding integer value as
// initially it will be set to zero
/*
for(char x : s){
mp[x]++;
}
*/
// Traversing the unordered map to
// print frequency of each element
// of the input string
for(auto it : mp){
cout << it.first << " " << it.second << endl;
}
}Output:
y 1 p 1 S 1 e 3 d 2 o 1 C 1
Leave a Reply