2行の2D配列を持ち、非常に大きな数(10^9まで)を持っています。 0th行に基づいて配列をソートしようとしています。C++:1行に基づく2次元配列のソート
例:私は配列があります:A[5][2]={{1,0},{3,1},{2,2},{6,3},{5,4}}
ここで、2行目は要素のインデックスです。
今、元のインデックスを保持して配列を並べ替える必要があります。
Aがあるべきソート後:
A[5][2]={{1,0},{2,2},{3,1},{5,4},{6,3}}
私は次のようでした:
long long a[n+1][2];
for (long long i = 0; i < n; i++)
{
cin>>a[i][0];
a[i][1]=i;
}
qsort(a, n, sizeof a[0], compare);
と機能を比較している:それは数字の小さい値のために働いている
int compare (const void *pa,const void *pb)
{
int *a = (int*)pa;
int *b = (int*)pb;
if(a[0] == b[0])
return a[1] - b[1];
else
return a[0] - b[0];
}
。大きな値の場合は、実行時エラー(SIGSEGV)が発生します。
誰かがエラーを修正するのを手助けできますか?それとももっと効率的な方法がありますか?
注::私は比較機能で長い間試してみましたが、変換エラーが発生していました。
error: invalid conversion from 'll (*)(const void*, const void*) {aka long long int (*)(const void*, const void*)}' to '__compar_fn_t {aka int (*)(const void*, const void*)}' [-fpermissive]
EDIT:実は私は、ソート後にのみインデックスを離れて仕事ができます。
「long long」と「int」が混在している可能性がありますか? –
forループでlong longの代わりにsize_tを使用する方が良いことに気付きたいだけです。 –
変換エラーを表示します。 –