c++中sort函数调用报错Expression : invalid operator <的内部原理

在C++中使用sort函数时,若比较函数未满足弱序规则,即对于相等元素a和b,cmp(b, a)仍返回true,会导致编译器报'Expression : invalid operator <'的错误。这是因为编译器会通过反序调用cmp函数来检查弱序原则。为避免此问题,需要确保cmp函数在相等元素比较时不违反弱序规则。" 114169465,10540765,FastText文本分类:原理与Python实践,"['自然语言处理', '文本分类', '机器学习', '深度学习', 'fasttext']

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

当我们调用sort函数进行排序时,中的比较函数如果写成如下

bool cmp(const int &a, const int &b)
{
   if(a!=b)
	return a<b;   
   else       
        return true;
}

则在待排序列中如果出现相等元素,则会报错Expression : invalid operator <

原因是,c++编译器检测到调用cmp的参数a==b时,c++编译器会立即用反序参数调用cmp函数,即调用cmp(b,a),来判断cmp函数是否已经执行了严格的弱序规则(a与b相等则位置不被改变)

注意:两次cmp函数的调用后,都会调用内部的严格弱序规则检测函数(源码如下)

template<class _Pr, class _Ty1, class _Ty2> inline
	bool _Debug_lt_pred(_Pr _Pred,
		_Ty1& _Left, _Ty2& _Right,
		_Dbfile_t _File, _Dbline_t _Line)
	{	// test if _Pred(_Left, _Right) and _Pred is strict weak ordering
	if (!_Pred(_Left, _Right))
		return (false);
	else if (_Pred(_Right, _Left))
		_DEBUG_ERROR2("invalid operator<", _File, _Line);
	return (true);
	}

两次上述检测函数的调用࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值