C++技巧之STL(持续更新)
一、STL——map
1.在map中按值进行排序
C++的map,是一种key-value对照的容器,在用sort进行排序时,如果不进行变换是不能直接对值(value),因为sort排序,只能对顺序容器排序,所以只能对map的key,也就是关键字,排序。而大多数时候,需要对map的value,进行排序,比如,用map表示分数和人数 map<int, int> 需要输出人数最多或者最少的人对应的分数,或者按人数递增,递减的顺序输出对应的成绩。就需要就行转换了。可以将map放在vector中,然后对vector 进行排序,在直接操作!
代码如下:
bool cmp(const pair<int, int>& x, const pair<int, int>& y) { return x.second < y.second; } int main() { map<int, int>m; for (int i = 0; i < 10; ++i) { cin >> tmp; m[tmp]++; } vector< pair<int, int> >n(m.begin(), m.end()); //用> > 不用>> 是因为>>是cout里面的,带有运算符重载 sort(n.begin(), n.end(), cmp); cout << n[0].first << endl; return 0; } //输入80 90 90 80 90 80 70 60 60 60 //map中key-value为 //80---->3 //90---->3 //70---->1 //60---->3 //排序后70---->1这组在容器第一位,所以输出70