Hash maps offer O(1) average insert, lookup, and delete. Sets track existence; maps track frequency or mapping.
Core Patterns
Pattern
Tool
Example
Existence check
unordered_set
Duplicates, anagram detection
Frequency count
unordered_map<T,int>
Count chars, top-k elements
Two-sum lookup
unordered_map<T,int>
Find pair that sums to target
Grouping
unordered_map<key, vector>
Group anagrams by sorted key
Prefix sum + map
unordered_map<int,int>
Count subarrays with target sum
Templates
// Frequency countunordered_map<int,int>freq;for(intx:arr)freq[x]++;// Two-sum lookupunordered_map<int,int>seen;// value → indexfor(inti=0;i<nums.size();i++){if(seen.count(target-nums[i]))return{seen[target-nums[i]],i};seen[nums[i]]=i;}// Group anagramsunordered_map<string,vector<string>>groups;for(string&s:strs){stringkey=s;sort(key.begin(),key.end());groups[key].push_back(s);}