C++ STLのmultimap::emplace_hint()関数を徹底解説
本記事では、C++ STLで提供されているmultimap::emplace_hint()関数の動作、構文、具体的な使用例について詳しく解説します。
C++ STLにおけるmultimap(マルチマップ)とは?
multimapは連想コンテナの一種で、mapコンテナとよく似た性質を持っています。キー(key)と値(mapped value)のペアからなる要素を、特定の順序で格納することができます。mapとの最大の違いは、同じキーに対して複数の要素を関連付けられる点です。コンテナ内部のデータは、常にキーに基づいて自動的にソートされながら管理されます。
multimap::emplace_hint()とは?
emplace_hint()は、C++標準ライブラリの<map>ヘッダファイルで定義されている組み込み関数です。この関数は、新しい要素をmultimapコンテナに挿入する際に、挿入位置のヒントとなるイテレータを渡せる点が特徴です。
動作はemplace()とほぼ同じですが、違いは位置のヒントを与えられることです。ヒントが適切であれば挿入処理を効率化できますが、multimapは常にキー順でソートされるため、要素がその位置に強制的に配置されるわけではありません。また、この関数を呼び出すとコンテナのサイズは1つ増加します。
構文
multimap_name.emplace_hint(iterator pos, Args&&... val);
パラメータ
この関数は、以下のパラメータを受け取ります。
pos − 挿入位置のヒントを指定するためのイテレータ型の引数。
val − コンテナに挿入したい要素(または要素を構築するための引数)。
戻り値
この関数は、要素が挿入(配置)された位置を指すイテレータを返します。
使用例1
入力
std::multimap<char, int> odd;
odd.insert({'a', 1});
odd.insert({'b', 3});
odd.insert({'c', 5});
odd.emplace_hint(odd.end(), 'd', 7);
出力
Odd: a:1 b:3 c:5 d:7
使用例2
次に、emplace_hint()を使って複数の要素を挿入する完全なサンプルコードを紹介します。
#include <bits/stdc++.h>
using namespace std;
int main(){
// コンテナを作成
multimap<int, int> mul;
// emplace_hint()を使って要素を挿入
mul.emplace_hint(mul.begin(), 1, 10);
mul.emplace_hint(mul.begin(), 2, 20);
mul.emplace_hint(mul.begin(), 3, 30);
mul.emplace_hint(mul.begin(), 1, 40);
mul.emplace_hint(mul.begin(), 4, 50);
mul.emplace_hint(mul.begin(), 5, 60);
cout << "\nElements in multimap is : \n";
cout << "KEY\tELEMENT\n";
for (auto i = mul.begin(); i != mul.end(); i++){
cout << i->first << "\t" << i->second << endl;
}
return 0;
}
出力
上記のコードを実行すると、次の出力が生成されます。
Elements in multimap is : KEY ELEMENT 1 40 1 10 2 20 3 30 4 50 5 60
begin()をヒントとして渡しても、multimapは常にキー順にソートされた状態を保つため、各要素は正しい位置に自動的に配置されます。同じキー「1」に対して2つの値(10と40)が共存している点も、multimapならではの特徴です。
-
【C++ STL】map::emplace_hint()関数の使い方を徹底解説
この記事では、C++ STLにおけるmap::emplace_hint()関数の動作、構文、および具体的な使用例について詳しく解説します。 C++ STLにおけるマップ(map)とは? マップ(map)は連想コンテナの一種で、キー値とマップされた値の組み合わせからなる要素を、特定の順序で格納することができます。マップコンテナ内のデータは、内部では常に対応するキーに基づいて自動的にソートされます。また、マップコンテナ内の各要素の値には、それぞれ一意なキーを通じてアクセスします。 map::emplace_hint()とは? map::emplace_hint()は、<map>ヘッダー
-
C++のSTLでマルチマップ(multimap)を実装するプログラムの解説
マルチマップ(multimap)は、C++の標準テンプレートライブラリ(STL)が提供する連想コンテナの一つで、複数の要素が同じキーを持てるという点を除けば、マップ(map)とよく似ています。マルチマップでは、キー値とマップ値のペアそのものが一意である必要があります。使用する主な関数mm::find() – マルチマップ内でキー値 b を持つ要素を検索します。見つかった場合はその要素へのイテレータを、見つからない場合は end() イテレータを返します。mm::erase() – 指定したキー値(またはイテレータが指す要素)をマルチマップから削除します。mm::equal_range() –