vector<pair<int, int>> 를 별도의 compare
함수 없이 sort()
함수로 정렬하면 결과가 어떻게 나올까?
궁금해서 간단한 코드를 짜봤다.
vector<pair<int, int>> 함수 안에 (1, 10) ~ (10, 1)까지의 데이터를 넣어줬다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
// 입력
vector<pair<int, int>> v;
for (int i=1; i<=10; i++) {
v.push_back({i, 11-i});
}
cout << "[정렬 전]\n";
for (pair<int, int> p : v) {
cout << p.first << ", " << p.second << "\n";
}
// 연산 및 출력
sort(v.begin(), v.end());
cout << "---------\n";
cout << "[정렬 후]\n";
for (pair<int, int> p : v) {
cout << p.first << ", " << p.second << "\n";
}
return 0;
}
이 코드의 결과는 다음과 같이 나왔다.
이것만 보면 pair.first 를 기준으로 정렬이 되는 거 같다.
더 정확하게 확인해보기 위해 이번에는 데이터를 (10, 1) ~ (1, 10) 순서로 넣어줬다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
// 입력
vector<pair<int, int>> v;
for (int i=1; i<=10; i++) {
v.push_back({11-i, i});
}
cout << "[정렬 전]\n";
for (pair<int, int> p : v) {
cout << p.first << ", " << p.second << "\n";
}
// 연산 및 출력
sort(v.begin(), v.end());
cout << "---------\n";
cout << "[정렬 후]\n";
for (pair<int, int> p : v) {
cout << p.first << ", " << p.second << "\n";
}
return 0;
}
결과는 다음과 같았다.
앞에서 말한 것처럼 pair.fisrt 를 기준으로 정렬되는 듯 하다.
그렇다면 pair.first 의 값이 같은 상황에서는 어떻게 정렬이 될까 궁금해서 이것도 확인해봤다.
이번에는 vector에 (0, 10) ~ (0, 0)까지의 데이터를 넣어줬다.
순서는 일부러 내림차순으로 설정해줬다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
// 입력
vector<pair<int, int>> v;
for (int i=10; i>=0; i--) {
v.push_back({0, i});
}
cout << "[정렬 전]\n";
for (pair<int, int> p : v) {
cout << p.first << ", " << p.second << "\n";
}
// 연산 및 출력
sort(v.begin(), v.end());
cout << "---------\n";
cout << "[정렬 후]\n";
for (pair<int, int> p : v) {
cout << p.first << ", " << p.second << "\n";
}
return 0;
}
이번에도 정렬 전과 정렬 후, 모두 출력해줬는데
pair.second도 똑같이 오름차순으로 정렬된다.
마지막 테스트는 랜덤으로 값을 넣어줬다.
코드는 다음과 같다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
srand((unsigned int)time(NULL));
// 입력
vector<pair<int, int>> v;
for (int i=0; i<10; i++) {
int n1 = rand() % 11;
int n2 = rand() % 11;
v.push_back({n1, n2});
}
cout << "[정렬 전]\n";
for (pair<int, int> p : v) {
cout << p.first << ", " << p.second << "\n";
}
// 연산 및 출력
sort(v.begin(), v.end());
cout << "---------\n";
cout << "[정렬 후]\n";
for (pair<int, int> p : v) {
cout << p.first << ", " << p.second << "\n";
}
return 0;
}
확인을 위해 이번에는 여러 번 코드를 돌려봤다.
vector<pair<int, int>> 함수는 compare
함수를 별도로 작성하지 않으면, 모두가 예상했듯이,
첫 번째 원소를 먼저 오름차순 정렬하고, 그 후에 두 번째 원소를 오름차순 정렬한다.
테스트를 위해 int형으로만 코드를 짰는데, 다른 타입의 변수도 똑같이 적용된다.