いくつかのユースケース:
マルチマップ
マルチセット
本質的には、キーと整数カウントを持つマップです。
ほとんどの場合、キーが一意であるが、そうでない場合もある状況が発生した場合に、マルチマップが役立つ1つの例。
たとえば、ハッシュをキーとして使用するキャッシュクラスを作成している場合です。ほとんどの場合、2つの異なるオブジェクトは同じハッシュを持たないため、キーは一意になります。ただし、さまざまなオブジェクトでハッシュの衝突が発生する可能性があるため、その状況をカバーするマルチマップが必要になります。
もう1つの例は、(データベースのように)あらゆる種類の一意でないインデックスです。
マルチセットに関しては、それらはあまり役に立たないと思います。私が考えることができるのは、それを一種の自動的にソートされたリストとして使用することだけです。
マルチセットまたはマルチマップは、特定のアイテムが複数存在する可能性がある状況向けです。たとえば、本のインデックスを作成したいとします。テキストをスキャンして、本当に一般的な意味のない単語( "a"、 "an"、 "the"など)をすべて捨ててから、残りのすべてのリストと、それぞれが本の中でどこにあるかをリストします。発生した。
かなりの数の単語が複数のページに表示されます。その場合、1つの単語から別のページにマッピングする複数のエントリがあります。これを処理する1つの方法は、単語からページ番号へのマルチマップです。
http://www.cplusplus.com/reference/stl/multimap/
マップは、マップコンテナと同様に、キー値とマップされた値の組み合わせによって形成された要素を格納する一種の連想コンテナですが、異なる要素が同じキー値を持つことができます。
これは、要素がキーを共有できる一種のレジストリです。あなたは会社と従業員について考えることができます。番地が鍵であり、従業員が価値観です。
ツリーのような構造を使用する場合は、マルチマップを使用します。
ベクトル/リスト(またはその他のコンテナー)に対してマルチセットを使用することの最も重要な利点は、検索操作の時間計算量です。マルチセットの平均ケース時間計算量はO(logn)であり、unordered_multisetはO(1)です。マルチマップとordered_multimapについても同じことが言えます。
これが ウィキペディア の使用法について述べています:
- 学生が複数のクラスに同時に登録される可能性がある学生登録システムでは、キーが学生IDであり、値がコースIDである、コースへの学生の登録ごとに関連付けが存在する場合があります。学生が3つのコースに登録されている場合、同じキーを含む3つのアソシエーションがあります。
- 本の索引は、所与の索引用語について任意の数の参照を報告することができ、したがって、索引用語から任意の数の参照場所へのマルチマップとしてコード化することができる。