IT Language 연습실
sort( ) 함수 사용해보기 (2) (pair) 본문
pair에 대해 알아보자.
pair는 자료형을 한 쌍의 데이터로 묶는 개념인데, 기본적으로 첫번째 데이터를 먼저 비교하고
첫번째 데이터 값이 같다면 두번째 데이터로 비교. 기본적으로 정수를 대상으로 ? 정렬 비교 한다?
즉 pair 라는 것은 int , double 이라는 두 자료형을 하나로 묶어 한 데이터라고 보는 것이다.
그럼 왼쪽에 들어오는 int 의 값이 첫번째 데이터 값이라고 first에 담긴다.
double의 값이 두번째 데이터 값이라고 second에 담긴다.
pair는 표준 라이브러리에 정의된 <vector>나 <algorithm>에 기본적으로 쓰이고 있어 둘중 하나 불러오면 된다.
또한 std namespace 로 묶여 있기 때문에 std를 명시해주거나 using 을 사용해줘야 한다.
그리고 pair도 템플릿으로 되어 있는데 대략 이러한 형태라고 보면 된다.
#include <iostream>
template <typename T1, typename T2>
class mypair {
T1 first;
T2 second;
public :
mypair(T1 n , T2 m) : first(n), second(m) {}
};
int main() {
mypair<int,double>aa(5, 5.5);
}
pair를 생성하는 방법은
mypair<int,double>aa(5, 5.5);
위 같은 코드도 가능하지만 다음의 코드 역시 가능함을 알고 있기를 바란다.
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
pair<int,double> p;
p = make_pair(1,1.1);
}
그렇다면 본격적으로 pair의 데이터들을 정렬 한번 해보자,
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare (pair<int,const char *> & ref, pair<int,const char *> & ref2) {
return ref > ref2;
}
int main() {
vector <pair<int,const char *>> aa;
aa.push_back(pair<int,const char *>(25, "kongman"));
aa.push_back(pair<int,const char *>(5, "Jung"));
aa.push_back(pair<int,const char *>(15, "Kimhee"));
aa.push_back(pair<int,const char *>(30, "Leesueng"));
sort(aa.begin(), aa.end(), compare);
for(auto & i : aa)
cout<<i.second<<endl;
}
vector를 통하여 가변적인 배열을 생성해줬고
vector의 멤버함수 push_back 을 사용했는데
push_back은 배열의 마지막 번지에 값을 추가하겠다라는 의미를 갖는다.
vector를 따로 한번 정리하여 블로그에 올리겠다. 그걸 참고하길 바란다. 대략적인 사용법은 array와 같다.
다만 다른것은 <int>만 명시해줘도 된다는 점이다.
array의 경우 <int, 길이> 를 명시해줬어야했지만 vector는 그러지 않아도 된다.
9. C++ STL sort() 함수 다루기 ②
지난 시간에는 클래스(Class)를 정의해서 여러 개의 변수가 존재하는 상황에서 '특정한 변수'를 기...
blog.naver.com
이곳을 통하여 공부를 많이 하였다. 부족한 부분은 링크한 곳에 들어가 부족한 부분을 채우기를 바란다.
이번에는 이름, 성적, 나이를 입력하여 성적순으로 출력을 하지만 성적이 같은 경우는 나이가 더 어린 쪽이 먼저 출력되도록 하는 경우이다. 즉 내림차순과 오름차순 둘 다 출력하는 경우이다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool compare (pair<const char *, pair<int,int>> & ref, pair<const char *, pair<int,int>> & ref2) {
if (ref.second.first == ref2.second.first) {
return ref.second.second < ref2.second.second;
}
else {
return ref.second.first > ref2.second.first;
}
}
int main() {
vector <pair<const char *, pair<int,int>>> aa;
aa.push_back(pair<const char *, pair<int,int>>("kongman",pair<int,int>(90, 25)));
aa.push_back(pair<const char *, pair<int,int>>("Jung",pair<int,int>(30, 5)));
aa.push_back(pair<const char *, pair<int,int>>("Kimhee",pair<int,int>(85,15)));
aa.push_back(pair<const char *, pair<int,int>>("Leesueng",pair<int,int>(90, 36)));
sort(aa.begin(), aa.end(), compare);
for(auto & i : aa)
cout<<i.first<<endl;
}
위 같은 코드로 페어안에 페어를 넣을 수도 있다.
페어의 첫번째 값은 이름이고 두번째는 페어가 있다. 따라서
second. first나 second를 불러올 수도 있다.
페어안에 페어를 이용한 경우도 알아봤다.
'알고리즘 > Sort(정렬)' 카테고리의 다른 글
sort( ) 함수 사용해보기 (1) (0) | 2024.03.03 |
---|---|
정렬(5) 퀵정렬 (0) | 2024.03.01 |
정렬(4) (병합정렬) (0) | 2024.03.01 |
정렬(3) (삽입정렬) (0) | 2024.02.29 |
정렬(2) 선택정렬 (0) | 2024.02.29 |