1. ホーム
  2. c++

[解決済み] マルチマップはベクトルマップに比べて何が優れているのですか?

2023-06-02 02:09:24

質問

ベクターのマップや集合のマップが作れるのに、なぜマルチマップが存在するのか理解できません。 私にとっては、唯一の相違点です。

  • を使っていること equal_range マルチマップではキーの要素を取得するために、ベクターのマップでは単純に [] 演算子を使い、要素のベクトルを得ることができます。
  • を使って multimap.insert(make_pair(key,value)) を使用して、マルチマップに要素を追加し map_of_vectors[key].push_back(value) はベクターのマップにおいて

では、なぜmultimapを使うのでしょうか?私にとっては、キーのすべての値を取得するために2つのイテレータを持つよりも、ベクトルを持つ方が良いのです。

この質問はunordered_map of vectorsとunordered_multimapにも当てはまります。

どのように解決するのですか?

同じキーを持つすべての値が、対処したい関係性を持っているかどうかによると思います。

例えば、キー X を持つすべての要素を頻繁に調べたり、関数に渡したりするのでしょうか。それなら、すでに別のコンテナに入っていて、直接アドレス指定できるほうが便利です。

しかし、同じキー値を共有するかしないかのアイテムのコレクションを持っているだけなら、なぜその間にベクトルを使うのでしょうか?マップとベクターのケースのためにネストされたfor-loopを持つよりも、イテレータでマルチマップを実行する方が便利なのです。

別の見方もあります。キーごとに複数のエントリーが非常に一般的である場合、その構造はマップ、ベクターのケースでより効率的です。

別の見方をすると、キーごとの複数エントリーが非常に一般的であれば、構造体はマップ、ベクトルのケースでより効率的です。