我正在尝试使用以下比较函数对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;
}
答案 0 :(得分:6)
当字符串完全相等时,您将返回true
。这违反了要求:函数必须定义严格的弱排序,即f(x, x)
必须返回false
。您的函数返回true
,并且库可能包含一个不会发生这种情况的检查。
答案 1 :(得分:0)
您可以停止在字符串中存储数字并使用大数字库(例如GMP MP)