Vector排序中遇到的坑(lambda表达式)

本文介绍了一个使用C++对map中的元素进行排序时遇到的问题。通过将map中的键值对复制到vector中,并尝试使用sort函数进行降序排序,发现直接反转return语句会导致错误。文章解释了原因在于比较函数需遵循严格弱排序规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在针对一个map进行值排序的时候,想到将map中键值对放到vector中,然后通过sort来进行排序。于是,奇妙的事情发生了。。,代码如下:

//将map赋值给vector	
vector<pair<char, int>> numV(numM.begin(), numM.end());
//从小到大排序
//sort(numV.begin(), numV.end(), [numV](pair<char,int> i, pair<char, int> j){
//	if (i.second > j.second)
//	{
//		return true;
//	}
//	return false;
//	});

sort(numV.begin(), numV.end(), [numV](pair<char, int> i, pair<char, int> j) {
	if (i.second > j.second)
	{
		return false;
	}
	return true;
	});

注释部分代码运行正常,于是巨坑来了,想当然觉得从大到小排序不就是return取反吗,于是就有上面第二部分代码。但是,错误来了:
在这里插入图片描述
经码友提示,原来是因为
这里面的比较函数是严格弱类型,也就是当判断a==b的时候,必须返回false,(两值相等返回 false,错的那边返回 true,所以错了。)
引用码友的一句话------(神奇的 C++)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值