boost::property_map

トップページ > アルゴリズム >

abstract

必要なヘッダ
<boost/property_map/property_map.hpp>
出来ること
mapに関するさまざまなconceptの定義集
リファレンス
en / jp

sample

サンプルの動作確認バージョン [GCC4.4/1.41.0] [VC9/1.41.0]

#include <iostream>
#include <string>
#include <map>
#include <boost/property_map/property_map.hpp>
using namespace std;

// Associative-Map
typedef map<string,string> StrStrMap;
typedef boost::associative_property_map<StrStrMap> Name2AdrMap;

// 値渡しですが
void foo( Name2AdrMap address )
{
	address[ string("Taro") ] = "Osaka";

	string old_address = get( address, string("Hanako") );
	put( address, string("Hanako"), old_address+"@Japan" );
}

int main()
{
	StrStrMap n2a;
	n2a.insert( make_pair( string("Taro"), string("Tokyo") ) );
	n2a.insert( make_pair( string("Hanako"), string("Kyoto") ) );

	Name2AdrMap address_map( n2a );

	foo( address_map );

	// 呼び出し側の値も書き変わります
	for( StrStrMap::iterator i = n2a.begin(); i!=n2a.end(); ++i )
		cout << i->first << ": " << i->second << endl;

	return 0;
}

出力例

Hanako: Kyoto@Japan
Taro: Osaka

etc

"あるデータ型の値に対してどのような操作をほどこすことが可能か?" という疑問に答える"可能な操作の集合"みたいな概念が、STL の Concept として定義されてきました。例えばIteratorのconceptとしては、 ++itができて*itで値が取り出せる、"InputInterator" concept や、 it+=10 や it-=5 ができるなどする "RandomAccessIterator" concept などなど。 このライブラリでは、ある型の値から別の型の値への写像、つまり "map" に関するConceptが幾つか定義されています。 read_onlyであるとかwrite_onlyであるとか。

また、それらConceptの具体例として、keyをそのままvalueとして返す identity_property_map とか、ランダムアクセスイテレータを map がわりに使うためのアダプタとしての iterator_property_map とか、 上のサンプルのように、値渡ししてもlvalueとして使える associative_property_map など、幾つかのmapが実際に定義されています。

主にboostのgraphライブラリで、頂点や辺の情報を格納するコンテナに対する要件として 使われているようです。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0