You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++大数字符串比较自定义比较器等长返回a<b的原因

static bool cmp(string &a,string &b)
{
    if(a.size()==b.size())
    {
        return a<b;
    }
    return a.size()<b.size();
}

逻辑解释

这个自定义比较器是用来给无前置零的正整数字符串做升序排序的,长度相等时直接返回a < b的原因非常直观:

  • 正整数的大小和位数强相关:位数不同时,位数更长的数字一定更大,比如4位的"3922"必然小于5位的"12929",所以长度不等时直接比较长度即可。
  • 位数相同时,数字大小顺序和字符串字典序完全匹配:C++的字符串<运算符会从左到右逐位比对字符的ASCII码值,而数字字符'0'到'9'的ASCII码是连续递增的,正好对应数字本身的大小关系。比如"1892"和"1922"比较,前两位分别是'1'和'8'/'9','8'的ASCII码小于'9',直接得出"1892" < "1922",和数字实际大小结果完全一致,不需要额外手写逐位比较逻辑。

注意:该比较器存在适用限制,如果存储的字符串有前导零、负号或者非数字字符,比较结果会出错。

内容的提问来源于stack exchange,提问作者Jason Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:24:03