pair ヘッダファイル

pairは2つの値をペアにして1つとして扱うためのクラス。

template  struct pair
{
  typedef T1 first_type;
  typedef T2 second_type;

  T1 first;
  T2 second;
  pair() : first(T1()), second(T2()) {}
  pair(const T1& x, const T2& y) : first(x), second(y) {}
  template 
    pair (const pair &p) : first(p.first), second(p.second) { }
}

使い方。

pair pairif;

11.04.24追記
ことあるごとにpair とかくのは少々めんどくさいので、

#define pii pair  として、
//使うときは、
vector< pii > step  //必ず、空白をあけるようにする.
//初期化
pairif = pair( 10, "aaa" )


cpair make_pair( const T1 &a, const T2 &b );となっているが、
OKだった。まぁ、よく考えればOKのはずだよね.

  pair h(87.5, 78.4);
  h.first /= 2;
  cout <<"1:" << h.first <
  vector arr;
  arr.push_back(377);
  arr.push_back(455);
  pair h(arr[0], arr[1]);
  h.first /= 2;
  h.second /= 3;
  cout <<"1:" << h.first <

ちなみに、VC++ では、swap(h)とか使えるみたいだが、pair::swap (STL/CLR)なので、注意.

ちょっと複雑

int sz = numbers.size();
//vector > anl(sz); でOK!!(初期化必要なし.)
vector > anl(sz, pair(0, 0));
for(int i = 0; i < sz; i++) {
anl[i].first = numbers[i];
anl[i].second = binarysearch(numbers[i]);
}


setとの併用でも割と使われる.

typedef pair pii;
set uniq; //pairはすでにsetに必要な演算子オーバーロードしているので、
例えば、ユニークなn次元座標の点を作るときとかは結構便利.
これが構造体だと、setをつかうのに、演算子オーバーロードしなくてはいけなくなる.