回答編集履歴
2
3項演算子を使わないコード
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版のコードを追加
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
|
```
|