#include <algorithm>
#include <iostream>
#include <iterator>
#include <utility>
#include <vector>

using namespace std;

vector<size_t> rankSort(const float* v_temp, const size_t size) {
	vector<pair<float, size_t> > v_sort(size);

	for (size_t i = 0U; i < size; ++i) {
		v_sort[i] = make_pair(v_temp[i], i);
	}

	sort(v_sort.begin(), v_sort.end());

	pair<double, size_t> rank;
	vector<size_t> result(size);

	for (size_t i = 0U; i < size; ++i) {
		if (v_sort[i].first != rank.first) {
			rank = make_pair(v_sort[i].first, i);
		}
		result[v_sort[i].second] = rank.second;
	}
	return result;
}

int main() {
	const float v_temp[] = { 10.0F, 332.0F, 42.0F, 0.9F, 0.0F, 42.0F };
	const vector<size_t> v_sort = rankSort(v_temp, sizeof(v_temp) / sizeof(*v_temp));

	copy(v_sort.begin(), v_sort.end(), ostream_iterator<size_t>(cout, " "));
}