Wednesday, 15 April 2015

c++ - How can I order an array with duplicate values? -



c++ - How can I order an array with duplicate values? -

i want order array of stuffs may have duplicates. example:

int values[5] = {4, 5, 2, 5, -1}; int expected[5] = {1, 2, 0, 2, -1};

here 2 smallest element order 0. 4 2nd smallest order 1. 5 3rd smallest , want both of them have order 2. want skip on elements (-1 in above example) these elements have order -1.

how do in c++ or describe algorithm ?

thanks

just sort array, assign each element rank:

vector<int> v(values, values + 5); v.push_back(-1); sort(begin(v), end(v)); v.resize(unique(begin(v), end(v)) - begin(v)); (int = 0; < 5; ++i) expected[i] = lower_bound(begin(v), end(v), values[i]) - begin(v) - 1;

this assumes elements non-negative or -1. if there negative elements smaller -1, need special case -1.

c++ algorithm

No comments:

Post a Comment