# Sort elements by frequency using STL

• Difficulty Level : Medium
• Last Updated : 01 Feb, 2023

Given an array of integers, sort the array according to frequency of elements. If frequencies of two elements are same, print them in increasing order. Examples:

```Input : arr[] = {2, 3, 2, 4, 5, 12, 2, 3, 3, 3, 12}
Output : 3 3 3 3 2 2 2 12 12 4 5
Explanation :
No. Freq
2  : 3
3  : 4
4  : 1
5  : 1
12 : 2```

We have discussed different approaches in below posts : Sort elements by frequency | Set 1 Sort elements by frequency | Set 2 We can solve this problem using map and pairs. Initially we create a map such that map[element] = freq. Once we are done building the map, we create an array of pairs. A pair which stores elements and their corresponding frequency will be used for the purpose of sorting. We write a custom compare function which compares two pairs firstly on the basis of freq and if there is a tie on the basis of values.

Below is its c++ implementation :

## CPP

 `// C++ program to sort elements by frequency using``// STL``#include ``using` `namespace` `std;` `// function to compare two pairs for inbuilt sort``bool` `compare(pair<``int``,``int``> &p1,``            ``pair<``int``, ``int``> &p2)``{``    ``// If frequencies are same, compare``    ``// values``    ``if` `(p1.second == p2.second)``        ``return` `p1.first < p2.first;``    ``return` `p1.second > p2.second;``}` `// function to print elements sorted by freq``void` `printSorted(``int` `arr[], ``int` `n)``{``    ``// Store items and their frequencies``    ``map<``int``, ``int``> m;``    ``for` `(``int` `i = 0; i < n; i++)``        ``m[arr[i]]++;` `    ``// no of distinct values in the array``    ``// is equal to size of map.``    ``int` `s = m.size();` `    ``// an array of pairs``    ``pair<``int``, ``int``> p[s];` `    ``// Fill (val, freq) pairs in an array``    ``// of pairs.``    ``int` `i = 0;``    ``for` `(``auto` `it = m.begin(); it != m.end(); ++it)``        ``p[i++] = make_pair(it->first, it->second);` `    ``// sort the array of pairs using above``    ``// compare function.``    ``sort(p, p + s, compare);` `    ``cout << ``"Elements sorted by frequency are: "``;``    ``for` `(``int` `i = 0; i < s; i++)``    ``{``        ``int` `freq = p[i].second;``        ``while` `(freq--)``            ``cout << p[i].first << ``" "``;``    ``}``}` `// driver program``int` `main()``{``    ``int` `arr[] = {2, 3, 2, 4, 5, 12, 2, 3,``                ``3, 3, 12};``    ``int` `n = ``sizeof``(arr)/ ``sizeof``(arr[0]);``    ``printSorted(arr, n);``    ``return` `0;``}`

Output

`Elements sorted by frequency are: 3 3 3 3 2 2 2 12 12 4 5 `

Time Complexity : O(n Log n)

Space Complexity: O(n)
The above algorithm requires O(n) space for the hash map and the array of pairs.