2016-10-14 7 views
2

私は、このような配列を持っている:配列の配列をstd :: sortで並べ替えるには?

struct sort_left { 
    bool operator()(const long &left[2], const long &right[2]) { 
     return left[0] < right[0]; 
    } 
} 

は、その後、私は、ソートのためのライブラリ機能std::sortを使用します。私は、ソート配列の最初の要素によって二つの要素の配列を受け取り、それのためのコンパレータ機能を、書いた

long my_array_left[n][2]; 

my_array_left[n][2]

sort(begin(my_array_left), end(my_array_left), sort_left()); 

しかし、私はエラーがあります。 parameter type mismatch: Incompatible pointer types 'long **' and 'long[2]*'

どのように私はそれを克服できますか?

+4

related/dupe:http://stackoverflow.com/questions/20931669/sort-a-2d-array-in-c-using-built-in-function-other-other-method – NathanOliver

+0

あなたのコンパイラは本当に '長い[2] * '? – aschepler

+0

@ascheplerまさに! – kotokbek

答えて

4

あなたの当面の問題はなく、実際にポインタへの参照の配列への参照を取るコンパレータ持つことによって固定することができます。

struct sort_left { 
    bool operator()(const long (&left)[2], const long (&right)[2]) { 
     return left[0] < right[0]; 
    } 
}; 

をしかし、あなたは別の配列に配列を割り当てることができないので、あなたのコードが」勝ちましたとにかくコンパイルする。

あなたはstd::arrayを使用することによって、これを避けることができます。

array<array<long, 2>, N> arr{}; 
sort(arr.begin(), arr.end()); 

追加の利点は、arrayvalue_typeそれを定義する場合operator<が自動的に定義されていることです。

+0

'std :: array'の' value_type'として使用される 'std :: array'がソート可能であることはわかりませんでした。ニート! http://coliru.stacked-crooked.com/a/a232eca55a5fa6cb – caps

+0

エラー: 'N'の値は定数式では使用できません array 、N> arr; – kotokbek

+0

はい、C++で可変サイズの配列を持つことはできません。あなたがgcc拡張子として使っているなら、 'array arr [n]'と 'sort(arr、arr + n);を使います。 – krzaq