teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

3項演算子を使わないコード

2020/07/13 10:55

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -104,4 +104,27 @@
104
104
  for (int i = 0; i < n; i++)
105
105
  cout << num[i][0] << " " << num[i][1] << endl;
106
106
  }
107
+ ```
108
+ **追記2**
109
+
110
+ return b[0] == a[0] ? b[1] < a[1] : b[0] < a[0]; を 3項演算子を使わずに書くと、
111
+ ```C++
112
+ if (b[0] == a[0])
113
+ return b[1] < a[1];
114
+ else
115
+ return b[0] < a[0];
116
+ ```
117
+ となります。比較演算子 < による演算結果は true または false なので何の問題
118
+ もないのですが、比較演算の式はどうしても if文の中に書きたいというのなら、
119
+ ```C++
120
+ if (b[0] == a[0])
121
+ if (b[1] < a[1])
122
+ return true;
123
+ else
124
+ return false;
125
+ else
126
+ if (b[0] < a[0])
127
+ return true;
128
+ else
129
+ return false;
107
130
  ```

1

qsort版のコードを追加

2020/07/13 10:54

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -76,4 +76,32 @@
76
76
  for (int i = 0; i < n; i++)
77
77
  cout << num[i][0] << " " << num[i][1] << endl;
78
78
  }
79
+ ```
80
+ **追記**
81
+ vector ではなく、配列を使って、qsort でソートするなら、
82
+ ```C++
83
+ #include <iostream>
84
+ #include <cstdlib> // qsort
85
+ using namespace std;
86
+
87
+ int comp(const void *x, const void *y)
88
+ {
89
+ int (*a)[2] = (int (*)[2])x, (*b)[2] = (int (*)[2])y;
90
+ return b[0] == a[0] ? b[1] - a[1] : b[0] - a[0];
91
+ }
92
+
93
+ int main(void)
94
+ {
95
+ int num[100][2];
96
+ int n;
97
+ cin >> n;
98
+
99
+ for (int i = 0; i < n; i++)
100
+ cin >> num[i][0] >> num[i][1];
101
+
102
+ qsort(num, n, sizeof num[0], comp);
103
+
104
+ for (int i = 0; i < n; i++)
105
+ cout << num[i][0] << " " << num[i][1] << endl;
106
+ }
79
107
  ```