2009-08-06 13 views
0

私はあなたが私にこのアイデアを洗い流すのを助けてくれることを望んでいました。私はセットを作成したい。そして私はそういうものを作りたいと思う。ユーザーは、例えば「A」をセットの名前を表すために、単一の文字で入力しますセットを作るためのポインタのベクトル

vector<char*> sets; 

:このようなポインタのベクトルを持っています。しかし、私は 'A'を別のコンテナを指すようにしたいので、要素を追加することができます。
これはベクトルのベクターですか? 「A」はそのコンテナをどのように指していますか?

答えて

2

必要なものはmapです。

std::map<char, std::vector<YourElementClass> > 
+0

の場合:std :: map > さらに単純なC配列を使ってこの文字をインデックスにします。 – Drakosha

+1

マップのキーとしてchar *を使用しないでください。 std :: stringを使用します。私はポインタの順序があなたが望むものだとは思わない。 –

+3

ポインタの順序付けはあまり問題にはなりません(実際に格納されている順序や並べ替えの順序を気にしない限り)...もっと重要なことに、char *は欲しくない等しく、メモリの異なるチャンクに格納されている2つの文字列ではなく、*同じ文字列*(つまり同じメモリ)がキーとして使用されている場合と同じです。 – workmad3

1

私は(タイプがあなたのセットで保存したいものは何でもある場合)std::map<char*, std::set<Type> >がニーズを満たすだろうと思います。

STLコンテナの独自のバージョンを実装することは、一般的には悪い考えです。

1

キーのあなたの範囲が限られているので、あなたは、この場合にはベクトルのベクトルを使用することができます。

vector<vector<MyType> > container(128); 

今、あなたがキーとして入力された文字を使用して、適切なコンテナにアクセスすることができます。

MyType myTypeInstance; 
char input = 'a'; 
container[input].push_back(myTypeInstance); 

これはstd::map(すなわちmap<char, MyType>)を使用するよりも速くなければなりませんが、可能なすべてのコンテナを前面に配置する必要があります。後者の問題は、96個の値を割り当て、ユーザー入力から32を引くだけで対処することができます。

また、内部コンテナの型の複雑さによっては、値で格納する代わりにポインタ(またはboost::shared_ptrのようなスマートポインタ)を格納することをお勧めします。

vector<vector<shared_ptr<MyType> > > container(96); 

生ポインタを使用する場合は、ベクターによって回収されていないアイテムを確実に削除する必要があります。

関連する問題