# Sort elements by frequency in C++

When sorting elements in C++, the frequency of each element is counted and then used to determine the order in which the elements should be sorted. You can complete this work by utilizing sorting algorithms like std::sort as well as data structures like std::map and std::unordered_map.

1. Informational Data Structures for Frequency Counting
• std::map versus std::unordered_map counting the frequency of elements is a common task for these data structures. You can use them to store items as keys and the frequencies that go with them as values. If you don't need the elements to be sorted, you should use std::unordered_map instead of std::map. While std::unordered_map is quicker for counting but doesn't ensure that elements are sorted, std::map ensures that the elements are sorted.
2. Frequency Counting
• The input sequence (such as a vector or an array) should be iterated through.
• Update the frequency count for each element on the map for each encounter. Add the element to the map with a frequency count of 1 if it isn't already there. Upgrading its frequency count if it's already present on the map.
3. To be converted into a vector of pairs
• You must order the elements according to these frequencies after you have tallied the frequencies.
• Create a vector of pairs using the map's elements and frequency. Each pair consists of an element and the frequency that goes with it. You can sort the data using algorithms thanks to this.
4. Sorting based on Frequency
• Sort the vector of pairs according to the frequency values using a sorting method, such as std::sort.
• A unique comparison function that compares pairings based on frequency values can be created. It is common practice to compare frequency values in reverse direction while sorting data in descending order (greater frequency to lower frequency).
5. Sorted elements printing
• After sorting, you can repeatedly go through the vector of sorted pairs to get the elements in frequency order.
• The elements should be displayed in descending order of frequency for each pair, with each element being printed as many times as its frequency.
6. Output
• The elements will be arranged in output according to their frequency. The output of the sorting process will display elements with higher frequencies first.
• A map is used to count frequencies, and then the map is transformed into a vector of pairings. After that, the vector is sorted by frequency, and the sorted items are printed. This method is helpful for categorizing elements according to how frequently they occur or for analyzing the distribution of components in a dataset.

### Program:

Let's take an example to demonstrate a sort elements by frequency program in C++:

Output:

```Elements sorted by frequency:
3 3 2 2 1 8 4
```

### Explanation:

1. We begin with an input element vector that contains the elements that will be sorted by frequency.
2. We use a std::unordered_map called frequencyMap to determine how frequently each member in the input vector occurs.
3. Each time we loop through the items vector, we increase the count for that element's frequencyMap value.
4. We must turn the frequencyMap into a vector of pairs (frequencyVector) to use std::sort to order the elements by frequency.
5. We create a special comparison function called compareByFrequency that ranks pairings of data according to how frequently they occur.
6. We utilize our unique comparison method to compare frequencies and sort the frequencyVector using std::sort.
7. After that, the items are printed in order of frequency. We display an element for each pair in the sorted vector as many times as the frequency of that element.