0

各文字列が数値であるをソートするために、次の比較関数を使用しようとしています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 に答える