Convert an array to reduced form (Hashing) in C++


In this tutorial, we will be discussing a program to convert an array to its reduced form using hashing.

For this we will be provided with an array. Our task is to convert the given array in its reduced form such that it only contains elements ranging from 0 to n-1.

Example

 Live Demo

#include <bits/stdc++.h>
using namespace std;
//converting array to its reduced form
void convert(int arr[], int n){
   // copying the elements of array
   int temp[n];
   memcpy(temp, arr, n*sizeof(int));
   sort(temp, temp + n);
   //creating a hash table
   unordered_map<int, int> umap;
   int val = 0;
   for (int i = 0; i < n; i++)
   umap[temp[i]] = val++;
   //putting values in the hash table
   for (int i = 0; i < n; i++)
   arr[i] = umap[arr[i]];
}
void print_array(int arr[], int n) {
   for (int i=0; i<n; i++)
      cout << arr[i] << " ";
}
int main(){
   int arr[] = {10, 20, 15, 12, 11, 50};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Given Array :\n";
   print_array(arr, n);
   convert(arr , n);
   cout << "\nConverted Array:\n";
   print_array(arr, n);
   return 0;
}

Output

Given Array :
10 20 15 12 11 50
Converted Array:
0 4 3 2 1 5

Updated on: 16-Jan-2020

54 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements