블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2794)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (11)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

1. pair란?

  STL의 기본적인 유틸 클래스이다. 두가지의 값을 하나인것 마냥 사용할수 있도록 해주는 클래스이다.

 

2. pair 소스

      template<class _Ty1, class _Ty2>

      struct pair
      { 

             // store a pair of values
             typedef pair<_Ty1, _Ty2> _Myt;
             typedef _Ty1 first_type;
             typedef _Ty2 second_type;

            

             // 기본 생성자

             pair()  : first(_Ty1()), second(_Ty2())
             { 
             }

 

             // 복사 생성자

             pair(const _Ty1& _Val1, const _Ty2& _Val2) : first(_Val1), second(_Val2)
             { 

             }

             

             // 암시적 형변환시 사용되는 생성자      

             template<class _Other1,  class _Other2>
             pair(const pair<_Other1, _Other2>& _Right)  : first(_Right.first), second(_Right.second)
             { 

             }

 

            void swap(_Myt& _Right)
            {

                    if (this != &_Right)
                   { 

                         std::swap(first, _Right.first);
                         std::swap(second, _Right.second);
                   }
             }

             _Ty1 first; // the first stored value
             _Ty2 second; // the second stored value
       };

 

  두개의 탬플릿을 이용해서 값을 전달한다. 그 값이 명시적 형변환이냐 암시적 형변환이냐에 따라서 생성자를 호출하고 first와 second를 초기화 시켜준다. first와 second에 값을 넣어 주기 때문에 두개의 값을 하나로 사용할수 있다고 말해주는 것 같다.

 

3. 어디서? 어떻게? 사용을 할까?

  이제 막 STL 책에서 가장 앞쪽 부분만을 보고서 이렇게 글을 쓰다 보니 아주 조그만한 부분에서 사용되는것밖에 모르겠다. 일반적으로 우리는 vector, map, multimap등을 자주 사용하게 된다. 이런 부분에서 사용을 하면 매우 유용하다. 특히 map과 multimap의 경우에는 두개의 key와 value를 사용하게 되는데 이때 make_pair를 사용하면 매우 유용하다. make_pair는 아래와 같다.

 

                                    templateclass T1, class T2 >

                             namespace std {

                                    pair<T1, T2> make_pair( const T1& x, const T2& y )

                                    {

                                              return std::pair< T1, T2 >(x, y);

                                     }

                             }

 

  보면 알겠지만 pair<T1, T2>(x, y)를 리턴하기때문에 두개의 값을 하나로 쓰는 거라고 할수 있다. 그렇기 때문에 map과 multimap등에서 사용이 가능하다. 아래는 make_map을 사용한 예제 이다.

 

                                  using namespace std;

                            int main()

                            {

                                     typedef multimap< int, string > intStringMap;

                                     intStringMap coll;

 

                                     coll.insert( make_pair( 1"this" ) );

                                     coll.insert( make_pair( 2"that" ) );

                                     coll.insert( make_pair( 3"she" ) );

                                     coll.insert( make_pair( 4"you" ) );

 

                                     intStringMap::iterator pos;

                                     for( pos = coll.begin(); pos != coll.end(); pos++ )

                                     {

                                              printf("key : %d, value : %s\n", pos.first, pos.second.c_str() );

                                      }

 

                                      return 0;

                             }

 

  뭐 대충 이런 식으로 사용을 하면 유용하게 사용할수 있을 것 같다. 물론 이렇게 사요하지 않아도 된다. 위 소스는 multimap에 값을 넣고 반복자를 이용해서 값을 출력한 예제이다. 매우 간단하니 그냥 훓어보기만 하면 될것같다.

  pair 같은 경우는 STL에서 유용하게 사용되는 유틸 클래스이다. 이런 사용은 일반적인 경우이고 내부적으로 더욱 많은 부분에서 사용되고 있다고 한다.

 

4. 결론

  결국 처음에 말했던것과 같이 내가 이해한 pair는 두가지의 서로 다른 값을 하나와 같이 사용할수 있는 값의 집합이라고 보면은 매우 편한것 같다. 오늘 책을 잠깐 봤는데 읽으면서 나는 이렇게 이해했다. 책에서도 x, y값을 담는 POINT 구조체와 비슷한 느낌인것같다. 다른 점이라고한다면 template을 사용해서 서로 다른 타입의 변수를 대입할수 있다는 점인것 같다.


[출처]
 [STL] 유틸 클래스 pair|작성자 sangtakeg

반응형
Posted by blueasa
, |