用于对字符串向量进行排序的比较函数(每个字符串都是一个数字)C++

Posted

技术标签:

【中文标题】用于对字符串向量进行排序的比较函数(每个字符串都是一个数字)C++【英文标题】:Compare function for sorting vector of strings (each string is a number) C++ 【发布时间】:2013-08-21 14:58:47 【问题描述】:

我正在尝试使用以下比较函数对 vector<string> 进行排序,其中每个字符串都是一个数字(可能是高达 10^100 的大数字)。但是我在 VS2010 中遇到了调试断言失败错误。

bool compareNumberStrings (const string &a, const string &b) 

    if (a.length () < b.length ()) 
        return true;

    if (a.length () == b.length ()) 
    
        int i;
        for (i=0; i<a.length() && a[i] == b[i]; i++);

        if (i != a.length ()) 
            return a[i] < b[i];
        else 
            return true;
    

    return false;

【问题讨论】:

为什么不使用stringstream 将字符串转换为数字,然后对这些数字进行直接比较? 看看cplusplus.com/reference/algorithm/sort 并实现你自己的比较器。 愿意分享哪个断言触发了吗? @PlatinumAzure 字符串表示的数字可以是10^100,还能用吗? 你考虑过任意精度数库吗? 【参考方案1】:

当字符串完全相等时,您将返回 true。这违反了要求:函数必须定义严格的弱排序,即f(x, x) 必须返回false。您的函数返回true,并且该库很可能包含一个检查以确保不会发生这种情况。

【讨论】:

【参考方案2】:

您可以停止在字符串中存储数字并使用大数字库(例如GMP MP)

【讨论】:

以上是关于用于对字符串向量进行排序的比较函数(每个字符串都是一个数字)C++的主要内容,如果未能解决你的问题,请参考以下文章

自定义比较器,用于根据每个字符的频率对字符串进行排序

分段错误:C++ 使用 lambda 比较器对字符串向量进行排序

R语言字符串2021.2.3

根据关联的整数向量对字符串向量进行排序[重复]

在 C++ 中对向量进行分组排序

对向量的元素进行排序,其中每个元素都是一对[重复]