每日一题:身高排序

Question:有 n 个同学拍成一排,从左到右依次编号为 1 ~ n 。​ 现在给出了这个 n​ 位同学的身高,但是并不是按照高矮排序的。现在这些同学需要按照身高从矮到高的顺序重新排列,矮的同学在左边,高的同学在右边。如果两个同学身高相同,那么这两个同学的相对顺序不应该发生变化。​ 请你输出排序以后从左到右同学的编号。

涉及知识点:
multimap基本操作、sort算法、vector容器

注意点:此处要考虑到重复身高的问题,此时输出的序号应该是从小到大的,如果是hash_multimap,可能会出现从大到小的误差,因此,需要

#include 
#include 
#include 
#include 
int main() {
     
	std::multimap<int, int> mp;
	std::vector<int> v;
	int m;
	int tall_value;
	std::cin >> m;
	for (int i = 1; i <= m; i++) {
     
		std::cin >> tall_value;
		mp.insert(std::pair<int, int>(tall_value, i));
		v.push_back(tall_value);
	}
	sort(v.begin(), v.end());
	for (int i = 0; i < v.size(); i++) {
     
      auto it = mp.find(v[i]);
		if (i == v.size()-1) {
     
			std::cout << it->second;
        	mp.erase(it);
		}
		else {
     
			std::cout << it->second << " ";
        	mp.erase(it);
		}
	}
	return 0;
}

你可能感兴趣的:(每日一题:身高排序)