解放 - c++ multimap




ベクトルのマップに対してマルチマップの利点は何ですか? (2)

2つのイテレータ 私はあなたが間違っていると思う。

私がstd :: for_each()やマルチマップ上の他のalgoを使うときは、私は1つのイテレータ範囲しか使いません。そして、各キーのベクタで心配するよりもずっと簡単です。

ベクトルのマップやセットのマップを作成できるのであれば、なぜマルチマップが存在するのか理解できません。 私にとっての違いは、

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

なぜマルチマップを使用するのですか? 私にとっては、キーのすべての値を取得するために2つのイテレータよりもベクトルを持つほうがよいです。

この問題は、ベクトルとunordered_multimapのunordered_mapにも当てはまります。


multimap<x, y>map<x, vector<y>>間には多くの重要な違いがあります

マルチマップに値を挿入したら、イテレータを削除するまでイテレータが有効であることがわかります。これは非常に強力な性質であり、ベクトルのマップを持つことはできません。

multimap<x,y>::iterator p=mymap.insert(make_pair(a,b));

イテレータはマップから消去されるまで有効なままですが、2番目のケースではベクトルに新しいエントリを追加するたびに無効になります。

map<x, vector<y>>は、既存のキーで設定された空の値を持つことがありますが、マルチマップは存在しません。

これらは異なった振舞いをしています。

そして、正直言って私はマルチマップをライブラリで提供していない言語では見逃しています。







multimap