質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

925閲覧

AtCoderのabc001_4の途中で、二次元配列を昇順ソートしたい

smile_20200722

総合スコア11

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/03/29 07:59

前提・実現したいこと

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];
});

https://qiita.com/Arusu_Dev/items/c36cdbc41fc77531205c

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuma-s

2021/03/29 15:05

一つの変数 SE に 全部の行を読み込んでも、最後の行しか入りませんよ。
smile_20200722

2021/03/30 05:05

kazuma-sさん、返信ありがとうございます。 初歩的なミスでした。 ご指摘ありがとうございます。
guest

回答1

0

自己解決

kazuma-sさんにご指摘いただいた部分のコード

c++

1for(int i = 0; i < N; i++) { 2 cout << SE.at(i) << endl; 3 }

ソート(バブルソート)のコード

c++

1void my_sort(vector<vector<int>> &T) { 2 for(int i = 0; i < T.size() - 1; i++) { 3 for(int j = T.size() - 1; j > i; j--) { 4 if(T.at(j).at(0) < T.at(j - 1).at(0)) { 5 int tmp = T.at(j).at(0); 6 T.at(j).at(0) = T.at(j - 1).at(0); 7 T.at(j - 1).at(0) = tmp; 8 tmp = T.at(j).at(1); 9 T.at(j).at(1) = T.at(j - 1).at(1); 10 T.at(j - 1).at(1) = tmp; 11 } 12 } 13 } 14} 15

投稿2021/03/30 05:08

smile_20200722

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問