关于sort的cmp写法

博客探讨了在使用sort时cmp函数的正确写法,指出 cmp(u,v)=1且cmp(v,u)=1可能导致排序卡死的问题,强调相等元素的处理,并提供了测试代码以确保实现严格弱序原则。" 51034204,5614255,OC初始化模板详解,"['Objective-C', '初始化方法', '类设计', '继承']

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

有一些cmp写法会使得sort卡死。
经过实验,发现需要不存在有两个元素 u , v u,v u,v使得 c m p ( u , v ) = 1 , c m p ( v , u ) = 1 cmp(u,v) = 1 , cmp(v,u) = 1 cmp(u,v)=1,cmp(v,u)=1,否则就有可能在大数据下卡死。(当然显然不能排序的也会卡死)
注意是可以 c m p ( u , v ) = 0 , c m p ( v , u ) = 0 cmp(u,v)=0,cmp(v,u)=0 cmp(u,v)=0,cmp(v,u)=0的。
所以如果需要排序的元素中有相等的,那么返回0.。。。。。

测试代码:

#include<bits/stdc++.h>
using namespace std;

bool cmp(const int &u,const int &v){ return u<=v; }// TLE

int a[1000000];

struct cmp2{
	bool operator ()(const int &u,const int &v){ return u<v;  }
};
multiset<int,cmp2>st;

int main(){
	for(int i=0;i<100000;i++) a[i] = rand() % 2;
	sort(a,a+100000,cmp);
	printf("%d\n",a[0]);
	
	for(int i=0;i<100000;i++) st.insert(a[i]);
	printf("%d\n",a[0]);
}

原理

严格弱序。
相等相当于不可比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值