17

どちらがより効率的かを考えています。

std::map< String, std::set<int> >

また

std::multimap< String, int >

編集: 私は、これらのマップで異常なことをするつもりはありません。標準の挿入、削除、変更、検索。各セットまたはマルチキー文字列のサイズは 100 を超えてはなりません。

4

6 に答える 6

12

これは実装に依存すると私は信じていますが、(知識のない)推測:

multimap実際には、またはに保持する整数の数によって異なりますstd::set。Amultimapは、キーのlog(n)検索の後に、値の線形検索を使用する可能性があります。整数値が多数ある場合は、キーのlog(n)検索に続いて、値のlog(n)検索が少し速くなる可能性があります。

ただし、効率の観点から、キーを使用して、mapまたはキーを使用して何かを保存することは、どちらの場合もほぼ確実に違いを上回ります。multimapstring

以下で説明するように、amultimapは使いやすく、維持しやすいため、明確な利点があります。

于 2011-09-08T16:12:08.373 に答える
6

「set」オプションは、マルチマップがそうでないかどうかにかかわらず、キーと値のペアの重複を排除します。

于 2013-01-29T16:11:56.260 に答える
2

これまでの回答に満足できず (満足していないとは言いません)、どうしても回答せざるを得ない場合は、知識に基づいた「推測」も行います。

挿入すると、マルチマップの方が「効率的」に見えます。マップ アプローチでは、最初に取得し、次にセットに対して操作を実行する必要があります。削除/取得するには、マップがより「効率的」に見えます。

于 2011-09-08T16:34:23.547 に答える
1

はっきりとは言えませんが、マルチマップは他の表現と同じように設計されているので、具体的にマルチマップを使用する方がよいでしょう。もっと理にかなっています。また、操作するためのメンバー関数もあります。概念としてのマルチマップでは、これらの関数は他のアプローチを使用すると少しファンキーになります。

于 2011-09-08T16:11:43.880 に答える
1

std::multimap< String, int > の方がメモリ効率が高い可能性があります。

于 2011-09-08T16:13:20.020 に答える