前提・実現したいこと
AtCoderのabc001_4の途中でつまづいてます。
二次元配列を昇順ソートしたいのですが、やり方がわかりません。
abc001_4の途中なので、問題とは若干違うコードになっています。
やりたいことは、読み込んだ数値を2次元配列に入れて、数値の下一桁を丸め、昇順ソートして表示することです。
AtCoderの問題を貼り付けると表示が乱れてしまうため、お手数ですがサイトより問題を確認していただけると助かります。
https://atcoder.jp/contests/abc001/tasks/abc001_4
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
c++
1#include <bits/stdc++.h> 2using namespace std; 3 4// 整数の下一桁を0か5に丸める関数 5// xは整数、yは0か5のどちらで丸めるかの値 6int my_round(int x, int y) { 7 string s = to_string(x); 8 if(y == 0) { 9 s.at(3) = '0'; 10 } else if(y == 5) { 11 s.at(3) = '5'; 12 } else { 13 return 0; 14 } 15 return atoi(s.c_str()); 16} 17 18int main() { 19 int N; 20 cin >> N; 21 string SE; 22 for(int i = 0; i < N; i++) { 23 cin >> SE; 24 } 25 vector<vector<int>> T(2, vector<int>(2)); 26 for(int i = 0; i < N; i++) { 27 string tmp; 28 tmp = SE.at(0); 29 tmp += SE.at(1); 30 tmp += SE.at(2); 31 tmp += SE.at(3); 32 T.at(i).at(0) = atoi(tmp.c_str()); 33 T.at(i).at(0) = my_round(T.at(i).at(0), 0); 34 35 tmp = SE.at(5); 36 tmp += SE.at(6); 37 tmp += SE.at(7); 38 tmp += SE.at(8); 39 T.at(i).at(1) = atoi(tmp.c_str()); 40 T.at(i).at(1) = my_round(T.at(i).at(1), 5); 41 } 42 43 for(int i = 0; i < N; i++) { 44 cout << T.at(i).at(0) << '-' << T.at(i).at(1); 45 } 46 return 0; 47}
試したこと
ネットで調べたsort関数のコードを試したのですが、中身の値が「0-0」になってしまいます。
以下が試したコードです。
sort(T.begin(), T.end(),
[](const vector<int> &alpha, const vector<int> &beta) {
return alpha[0] < beta[0];
});
回答1件
あなたの回答
tips
プレビュー