回答編集履歴

2

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

2020/07/13 10:55

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -211,3 +211,49 @@
211
211
  }
212
212
 
213
213
  ```
214
+
215
+ **追記2**
216
+
217
+
218
+
219
+ return b[0] == a[0] ? b[1] < a[1] : b[0] < a[0]; を 3項演算子を使わずに書くと、
220
+
221
+ ```C++
222
+
223
+ if (b[0] == a[0])
224
+
225
+ return b[1] < a[1];
226
+
227
+ else
228
+
229
+ return b[0] < a[0];
230
+
231
+ ```
232
+
233
+ となります。比較演算子 < による演算結果は true または false なので何の問題
234
+
235
+ もないのですが、比較演算の式はどうしても if文の中に書きたいというのなら、
236
+
237
+ ```C++
238
+
239
+ if (b[0] == a[0])
240
+
241
+ if (b[1] < a[1])
242
+
243
+ return true;
244
+
245
+ else
246
+
247
+ return false;
248
+
249
+ else
250
+
251
+ if (b[0] < a[0])
252
+
253
+ return true;
254
+
255
+ else
256
+
257
+ return false;
258
+
259
+ ```

1

qsort版のコードを追加

2020/07/13 10:54

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -155,3 +155,59 @@
155
155
  }
156
156
 
157
157
  ```
158
+
159
+ **追記**
160
+
161
+ vector ではなく、配列を使って、qsort でソートするなら、
162
+
163
+ ```C++
164
+
165
+ #include <iostream>
166
+
167
+ #include <cstdlib> // qsort
168
+
169
+ using namespace std;
170
+
171
+
172
+
173
+ int comp(const void *x, const void *y)
174
+
175
+ {
176
+
177
+ int (*a)[2] = (int (*)[2])x, (*b)[2] = (int (*)[2])y;
178
+
179
+ return b[0] == a[0] ? b[1] - a[1] : b[0] - a[0];
180
+
181
+ }
182
+
183
+
184
+
185
+ int main(void)
186
+
187
+ {
188
+
189
+ int num[100][2];
190
+
191
+ int n;
192
+
193
+ cin >> n;
194
+
195
+
196
+
197
+ for (int i = 0; i < n; i++)
198
+
199
+ cin >> num[i][0] >> num[i][1];
200
+
201
+
202
+
203
+ qsort(num, n, sizeof num[0], comp);
204
+
205
+
206
+
207
+ for (int i = 0; i < n; i++)
208
+
209
+ cout << num[i][0] << " " << num[i][1] << endl;
210
+
211
+ }
212
+
213
+ ```