if(a[0] != a[1]) return a[0] < a[1];
return a[1] < a[2];
});
の部分で、operator[]が返すのがconstでないのでラムダの引数と一致せず、そのためにコンパイルできません。
vectorなどでは同じ状況でアクセス演算子の[]が使えているのですが、構造体Sでも同じように使うにはどうすれば良いのでしょうか。
#include <algorithm>
#include <ctime>
#include <cstdlib>
struct S {
S(int i = 0, int j = 0) {
arr[0] = i;
arr[1] = j;
}
int arr[2];
int & operator[](int i){
return arr[i];
}
};
int main(){
srand(time(0U));
S arr[10];
for(int i = 0; i < 10; i++){
arr[i] = S(rand(), rand());
}
std::sort(arr, arr + 10, [] (const S &a, const S &b){
if(a[0] != b[0]) return a[0] < a[1];
return a[1] < b[1];
});
}