どちらがより効率的かを考えています。
std::map< String, std::set<int> >
また
std::multimap< String, int >
編集: 私は、これらのマップで異常なことをするつもりはありません。標準の挿入、削除、変更、検索。各セットまたはマルチキー文字列のサイズは 100 を超えてはなりません。
これは実装に依存すると私は信じていますが、(知識のない)推測:
multimap
実際には、またはに保持する整数の数によって異なりますstd::set
。Amultimap
は、キーのlog(n)検索の後に、値の線形検索を使用する可能性があります。整数値が多数ある場合は、キーのlog(n)検索に続いて、値のlog(n)検索が少し速くなる可能性があります。
ただし、効率の観点から、キーを使用して、map
またはキーを使用して何かを保存することは、どちらの場合もほぼ確実に違いを上回ります。multimap
string
以下で説明するように、amultimap
は使いやすく、維持しやすいため、明確な利点があります。
「set」オプションは、マルチマップがそうでないかどうかにかかわらず、キーと値のペアの重複を排除します。
これまでの回答に満足できず (満足していないとは言いません)、どうしても回答せざるを得ない場合は、知識に基づいた「推測」も行います。
挿入すると、マルチマップの方が「効率的」に見えます。マップ アプローチでは、最初に取得し、次にセットに対して操作を実行する必要があります。削除/取得するには、マップがより「効率的」に見えます。
はっきりとは言えませんが、マルチマップは他の表現と同じように設計されているので、具体的にマルチマップを使用する方がよいでしょう。もっと理にかなっています。また、操作するためのメンバー関数もあります。概念としてのマルチマップでは、これらの関数は他のアプローチを使用すると少しファンキーになります。
std::multimap< String, int > の方がメモリ効率が高い可能性があります。