표준 C++ 라이브러리에는 두 개의 요소를 가지는 구조체: pair가 정의되어 있습니다.

  

pair

#include <iostream>

#include <string>

#include <utility> // pair

 

using namespace std;

 

int main()

{

   const int N = 3;

   pair phone[N];

 

  phone[0] = pair( "경찰" , 110); // 대입 1

  phone[1].first = "시보" ; // 대입 2

  phone[1].second = 117;

  phone[2] = make_pair( "소방" , 119); // 대입3

 

  phone[0].swap(phone[2]); // 교환

 

  for ( int i = 0; i < N; ++i ) {

    cout << phone[i].first << ':' << phone[i].second << endl;

  }

}


<
실행 결과>

소방:119

시보:117

경찰:110

 


pair로 묶을 수 있는 요소 수는 2개로 한정되기 때문에 그 이상의 요소 수를 정리하는 것은 많이 귀찮습니다.

   

pair에 억지로 3개의 요소 사용

#include <iostream>

#include <string>

#include <utility> // pair

 

using names pace std;

 

// pair string pair

struct musician : pair,string> {

typedef pair,string> base;

musician(string f, string m, string l) : base(make_pair(f,m),l) {}

};

 

ostream& operator <<(ostream& st ream, const musician& m) {

return stream << m.first.first << ' '

<< m.first.second << ' '

<< m.second;

}

 

int main()

{

musician wam( "Wolfgang" ,"Amadeus" ,"Mozart" );

musician jsb( "Johann" ,"Sebastian" ,"Bach" );

cout << wam << endl << jsb << endl;

}

 

< 실행 결과 >

Wolfgang Amadeus Mozart

Johann Sebastian Bach

 

 

TR1에서 제공 되는 tuple은 두 개 묶음인 pair를 확장 하여 임의의 N개의 요소를 묶음으로 할 수 있습니다(N은 구현 의존 boost1.34.1에서는 최대 9개였습니다).

    

tr1::tuple판 '음악가'

#include <iostream>

#include <string>

#include <boost/tr1/tuple.hpp> // tuple

 

using name space std;

 

struct musician : tr1::tuple<string,string,string> {

typedef tr1::tuple<string,string,string> base;

musician(string f, string m, string l) : base(f,m,l) {}

};

 

ostream& operator <<(ostream& stream, const musician& m) {

return stream << tr1::get<0>(m) << ' '

<< tr1::get<1>(m) << ' '

<< tr1::get<2>(m);

}

 

int main()

{

musician wam( "Wolfgang" ,"Amadeus" ,"Mozart" );

musician jsb( "Johann" ,"Sebastian" ,"Bach" );

cout << wam << endl << jsb << endl;

}


le(2/2


출처 : http://codezine.jp/a/article/aid/2134.aspx



by 흥배 2010. 3. 8. 08:30