티스토리 뷰

1. 10825번 국영수

-N명 학생의 국, 영, 수 점수와 이름이 주어짐

-정렬 조건

1) 국어 점수가 감소하는 순서

2) 국어 점수가 같으면, 영어 점수가 증가하는 순서

3) 국어, 영어 점수가 같으면 수학 점수가 감소하는 순서

4) 모두 같으면 이름이 사전 순으로 증가하는 순서


2. cmp 함수 사용 시(tuple 미사용)


bool cmp(const Person& u, const Person& v){

if(u.kor > v.kor){ // 국어 점수가 감소하는 순서

return true;

}else if(u.kor == v.kor){ // 국어 점수가 같으면

if(u.eng < v.eng){ // 영어 점수가 증가하는 순서

return true;

}else if(u.eng == v.eng){ // 영어 점수도 같으면

if(u.math > v.math){ // 수학 점수가 감소하는 순서

return true;

}else if(u.math == v.math){ // 수학 점수도 같으면

return u.name < v.name; // 이름이 증가하는 순서

}

}

}

return false;

}


=> 너무 복잡한 경우에 tuple 사용


2. 튜플(tuple) 

-pair 의 확장 버전으로, pair는 2개의 타입 인자를 받지만, tuple은 2개 이상의 타입 인자를 받을 수 있다.

-예시


1)생성 및 초기화

  1. #include <tuple>
  2.  
  3. using namespace std;
  4.  
  5. typedef tuple<intdouble, string> ids;
  6.  
  7. int main()
  8. {
  9.    // 생성자, tuple 초기화
  10.    ids p1(101.1f"SooKkaRak");
  11.  
  12.    // 복사 생성
  13.    ids p2(p1);
  14. }


2) make_tuple

  1. #include <tuple>
  2.  
  3. using namespace std;
  4.  
  5. typedef tuple<intdoubleintdouble> Mytuple;
  6.  
  7. int main()
  8. {
  9.     // 0, 1.f, 2, 3.f의 초기값을 이용해 tuple 생성
  10.     Mytuple c0(01.f23.f);
  11.  
  12.     // 4, 5.f, 6, 7.f의 값으로 make_tuple을 이용해, tuple을 생성, c0에 대입 연산
  13.     c0 = make_tuple(45.f67.f);
  14.  
  15.     return 0;
  16. }


3) 튜플 값 참조

get<INDEX>(TUPLE_NAME); 


(예시)

  1. #include <tuple>
  2.  
  3. using namespace std;
  4.  
  5. typedef tuple<intdoubleintdouble> Mytuple;
  6.  
  7. int main()
  8. {
  9.     Mytuple c0(01.f23.f);
  10.      
  11.    cout << get<0>(c0) << endl; // 0 출력
    1. cout << get<1>(c0) << endl; // 1.f 출력
    2. cout << get<2>(c0) << endl; // 2 출력
    3. cout << get<3>(c0) << endl; // 3.f 출력
  12.     return 0;
  13. }



4) 더 자세한 내용은 

http://egloos.zum.com/sweeper/v/2994673


3. 튜플(tuple) 사용 시

-tuple 이나 pair 의 값을 서로 비교할 경우, 첫 번째 값으로 비교 후, 같으면 그 다음 값으로 비교


bool cmp(const Person& u, const Person& v){

return make_tuple(-u.kor, u.eng, -u.math, u.name) < make_tuple(-v.kor, v.eng, -v.math, v.name);

}




댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함