質問

C ++ STD :: MAPのように機能するクラスが必要です。より具体的には、私はそのような動作が必要です:
map< string, vector<int> > my_map;
出来ますか?

役に立ちましたか?

解決

辞書は私があなたが望むものを信じていることです:

Dictionary<String, int> dict = new Dictionary<String, int>();

dict.Add("key", 0);
Console.WriteLine(dict["key"]);

などなど

MSDN: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

キー/値のタイプとして、あらゆるタイプを多かれ少なかれ指定できます。別の辞書、アレイなどを含む:

Dictionary<String, String[]> dict = new Dictionary<String, String[]>();

したがって、ここでは、辞書の各要素が文字列の配列を指します。

必要なものを実装するには(Vector intを使用)、値タイプとしてリストが必要になります。

Dictionary<String, List<int>> dict = new Dictionary<String, List<int>>();

辞書には事前定義された順序がないのに対し、STD :: MAPがそうであることは注目に値します。順序が重要な場合は、代わりにsorteddictionaryを使用することをお勧めします。これは使用がほぼ同じですが、キーに並べ替えます。辞書を本当に繰り返す予定がある場合はすべて、すべてに依存します。

ただし、作成したクラスをキーとして使用する場合、GethashCodeを適切にオーバーライドして等しいことに注意してください。

他のヒント

それはあなたが本当に必要なものに依存します。すでに言われているように、あなたは使用してルックアップ動作を取得します System.Collections.Generic.Dictionary<Key, Value>, 、したがって、に相当します std::map<string, std::vector<int> > (使用してください System.Collections.Generic.List<int> vectorequivalentとして):

Dictionary<string, List<int>> myDictionary = new Dictionary<string, List<int>>();
myDictionary.Add("a", new List<int>());

そのため、内部的に辞書はハッシュテーブルを使用し、std :: mapは赤ブラックツリーを使用しているため、std :: mapは注文されていません。注文された辞書が必要な場合(これはSTD :: MAPにより密接になります、使用できます System.Collections.Generic.SortedDictionary<Key, Value>. 。使用法は、辞書の使用法とほぼ同じです

はい、質問で書いた宣言は正しいです。 intsのベクトルに文字列をマップします。ただし、STD :: MAPは赤黒の木の実装に裏付けられており、あなたの質問はハッシュテーブルが必要であることを示唆しています。 Boostを使用できれば、UNORDERED_MAPの実装を試すことができます。これはTR1仕様の一部であり、マップをハッシュテーブルとして実装します。標準タイプのハッシュ関数はすでにブーストで実装されているため、これについて心配する必要はありません。

#include <boost/unordered_map.hpp>
...
boost::unordered_map<std::string, std::vector<int> > my_map;

目標がマップを交換することである場合、「sortdictionary」が必要です。なぜなら、それはまた、赤黒の木を実装するからです。ハッシュテーブルが必要な場合は、辞書が機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top