对map中的value值排序
看例题吧
给定n个正整数,每个正整数均不超过10000,请编写一个程序统计每个整数出现的次数,并按照出现次数从多到少的顺序输出。
输入
单组输入,每组两行。
第1行包含一个正整数n,n<=1000,表示给定的正整数的个数。
第2行包含n个正整数,相邻两个正整数之间用一个英文空格隔开,表示待统计的整数。
输出
输出多行,每行包含两个正整数,分别表示一个给定的正整数和它出现的次数,按出现次数递减的顺序输出。
如果两个整数出现的次数一样多,则先输出值较小的整数,然后输出值较大的。
样例输入 Copy
12
5 2 3 3 1 3 4 2 5 2 3 5
样例输出 Copy
3 4
2 3
5 3
1 1
4 1
pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
pair详细用法请看这里:https://blog.csdn.net/sevenjoin/article/details/81937695
#include<string>
#include<algorithm>
#include<iostream>
#include<map>
#include<vector>
using namespace std;
typedef pair<int, int>pp;//定义pair
int cmp(pp x, pp y) { //判断两个整数出现的次数是否一样多,
//若是先输出值较小的整数,然后输出值较大的
if (x.second == y.second) {
return x.first < y.first;
}
else
return x.second > y.second;
}
int main() {
int n;
cin >> n;
int* a = new int[n];
map<int, int>mm;
for (int i = 0; i < n; i++) {
cin >> a[i];
mm[a[i]]++;//首先获取key出现的次序
}
vector<pp> ve(mm.begin(), mm.end());//将map放入结构体pair中
sort(ve.begin(), ve.end(), cmp);//排序
for (int i = 0; i != ve.size(); i++) {
cout << ve[i].first << " " << ve[i].second << endl;
}
return 0;
}
最后我也是个小白,一起努力吧!