ハムスターに飼われる院生のブログ

自分用メモが中心のブログです。

multimapの使い方

以前、以下のリンクの記事にてmapの使用法を示した。
chicagopile1-75.hatenablog.com

mapでは、キーの値が重複した場合、値を複数保持できないという仕様になっている。
例えば、以下のような状態である。

int main(){
	map<int, int> test;

	test.insert(std::make_pair(1, 3));
	test.insert(std::make_pair(1, 100));
	test.insert(std::make_pair(3, 8));
	test.insert(std::make_pair(2, 1));

	//mapの中身を全てcoutで確認
	for (auto itr = test.begin(); itr != test.end(); ++itr) {
		std::cout << "key = " << itr->first<<"\t"<< ", value = " << itr->second;
	}
	cout << endl;

	return 0;
}

このコードを実行すると、key=1に対応する値はvalue=3しか出力されない。


mapの代わりにmultimapを使用すると同じkeyを持つ値を複数保持することができる。

int main(){
	multimap<int, int> test;

	test.insert(std::make_pair(1, 3));
	test.insert(std::make_pair(1, 100));
	test.insert(std::make_pair(3, 8));
	test.insert(std::make_pair(2, 1));

	//multimapの中身を全てcoutで確認
	for (auto itr = test.begin(); itr != test.end(); ++itr) {
		std::cout << "key = " << itr->first << "\t value = " << itr->second << endl;
	}
	cout << endl;

	return 0;
}

上のコードはmapをmultimapに変更しただけである。
key=1に対応する値のvalue=3とvalue=100が出力されることから、
同じkeyを持つ場合でも複数の値が保持されていることが分かる。