map中对value值排序

对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;
}

最后我也是个小白,一起努力吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H-rosy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值