I have an array of doubles that I map to a hashmap to keep track of the indices of the elements. I want to be able to sort the array and still keep track of the indices and thats no problem as long as the elements are distinct. But when I encounter 2 or more elements in the array that are equal my whole scheme fails since they will get the same index.

I see two solutions to the problem:

1: Find a way to generate better keys for the elements (dont know how to do this)


2. Throw out the hashmap and apply a new datastructure that actually does what I want. Anyone got any suggestions on this? Im not to excited about writing my own specific datastructure for this since it's overall a fairly small task that Im working on.

Thanks for any help!


6 Years
Discussion Span
Last Post by Slimmy

You mean you want to sort the array without actually swapping array values? I have done that before but used a second array of intgers that represent the array indices.

float data[5] = {3,1,4,9,2};
int indices[5] = {0,1,2,3,4};

// sort the data
for(int i = 0; i < 4; i++)
  for(int j = i+1; j < 5; j++)
     if( data[indices[i]] < data[indices[j]] )
        int temp = indices[i];
        indices[i] = indices[j];
        indices[j] = temp;

// now display the values
for(int i = 0; i < 5; i++)
   printf("%f\n", data[indices[i]]);

This technique is a good way to sort large 2d arrays also because it greatly reduces the number of items to be swapped during sorting. The contents of the original array are unchanged.

Edited by Ancient Dragon: n/a


Looks promising! I'll try that out and get back to you, thanks.


Worked fine for me, thanks!. Marking thread as solved.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.