C++
 Computer >> コンピューター >  >> プログラミング >> C++

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ならではの特徴です。

  1. 【C++ STL】map::emplace_hint()関数の使い方を徹底解説

    この記事では、C++ STLにおけるmap::emplace_hint()関数の動作、構文、および具体的な使用例について詳しく解説します。 C++ STLにおけるマップ(map)とは? マップ(map)は連想コンテナの一種で、キー値とマップされた値の組み合わせからなる要素を、特定の順序で格納することができます。マップコンテナ内のデータは、内部では常に対応するキーに基づいて自動的にソートされます。また、マップコンテナ内の各要素の値には、それぞれ一意なキーを通じてアクセスします。 map::emplace_hint()とは? map::emplace_hint()は、<map>ヘッダー

  2. C++のSTLでマルチマップ(multimap)を実装するプログラムの解説

    マルチマップ(multimap)は、C++の標準テンプレートライブラリ(STL)が提供する連想コンテナの一つで、複数の要素が同じキーを持てるという点を除けば、マップ(map)とよく似ています。マルチマップでは、キー値とマップ値のペアそのものが一意である必要があります。使用する主な関数mm::find() – マルチマップ内でキー値 b を持つ要素を検索します。見つかった場合はその要素へのイテレータを、見つからない場合は end() イテレータを返します。mm::erase() – 指定したキー値(またはイテレータが指す要素)をマルチマップから削除します。mm::equal_range() –