pairクラス
http://www.geocities.jp/ky_webid/cpp/library/011.html
pairは、2つの値をペアにして1つとして扱うためのクラスです。 前章のmapでは、キーと値をペアで扱う必要がありました。正にこのような用途で使うものです。前章のmapで、insertするとき、value_typeを使っていましたが、value_typeの正体は通常pairです。
な、なるほど。そういうことでしたか。
前回のmapクラスの時に使っていたvalue_typeとはとどのつまりpairクラスだったわけなんですね。
なのでmapのinsertにはvalue_typeじゃなくてpairを直接渡すことも可能です。試してみましょう。
#include <iostream> #include <map> #include <string> // pairを使うのに必要 #include <utility> using namespace std; int main () { map<string, int> data; // pairを使う data.insert( pair<string, int>("ddd",40) ); data.insert( pair<string, int>("aaa",10) ); data.insert( pair<string, int>("ccc",30) ); data.insert( pair<string, int>("bbb",20) ); data.insert( pair<string, int>("eee",50) ); map<string, int>::iterator it = data.begin(); while( it != data.end() ) { cout << "key=" << it->first << " value=" << it->second << endl; ++it; } return 0; }
$ main key=aaa value=10 key=bbb value=20 key=ccc value=30 key=ddd value=40 key=eee value=50
ちゃんと動きました。
そして次にpairのテンプレート引数を省略できるmake_pairというものもあります。
こちらも試してみます。
#include <iostream> #include <map> #include <string> #include <utility> using namespace std; int main () { map<string, int> data; // make_pairを使う data.insert( make_pair("ddd",40) ); data.insert( make_pair("aaa",10) ); data.insert( make_pair("ccc",30) ); data.insert( make_pair("bbb",20) ); data.insert( make_pair("eee",50) ); map<string, int>::iterator it = data.begin(); while( it != data.end() ) { cout << "key=" << it->first << " value=" << it->second << endl; ++it; } return 0; }
ばっちりです。make_pairはその引数から自動で型を検出して動いてくれるのでテンプレート引数を指定しなくても良いというわけなんですね。