2

次の単純なベクトル ソート プログラムは、2 回目のソート呼び出しで t >= 17 の場合にクラッシュします。最初の並べ替えは t == 100 の場合でも成功します。かなり長い間苦労しましたが、何が問題なのかわかりません。誰か助けてくれませんか?

MacBook Air と Linux マシンで試してみましたが、驚くべきことに、同じ結果が得られました。

#include<iostream>
#include<vector>
#include<algorithm>

    using namespace std;
    struct tc
    {
        unsigned int n;
    };
    bool sort_by_n( tc a, tc b )
    {
        return a.n <= b.n;
    }
    vector<tc> tcv(100);
    vector<int> tv(100);
    int main()
    {
        unsigned int t;
        cin >> t;
        for ( unsigned int i = 0 ; i < t ; i++ )
        {
            cin >> tcv[i].n;
            tv[i] = tcv[i].n;
        }
        sort( tv.begin(), tv.begin()+t); // ## This one works even for t == 100.
        sort( tcv.begin(), tcv.begin()+t, sort_by_n ); // ## This one crashes for t >= 17
        return 0;
    }
4

1 に答える 1

11

厳密な弱い順序付けを提供する必要がありますが、

bool sort_by_n( tc a, tc b )
{
    return a.n <= b.n;
}

は弱い順序でしかありません。要素が同じ場合、厳密な弱い順序が返される必要があります。false次のように変更する必要があります。

bool sort_by_n( tc a, tc b )
{
    return a.n < b.n;
}
于 2013-11-03T19:45:21.283 に答える