0

我正在尝试使用以下比较函数对 a 进行排序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;
}
4

2 回答 2

6

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

于 2013-08-21T15:05:02.630 回答
0

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

于 2013-08-21T15:14:27.510 回答