11

The C++ Standard Library: A Tutorial and Reference book を読んでいます。マップの例:

   typedef map<string,float> StringFloatMap;
   StringFloatMap coll;

   //insert some elements into the collection
   coll["VAT"] = 0.15;
   coll["Pi"] = 3.1415;
   coll["an arbitrary number"] = 4983.223;
   coll["Null"] = 0;

著者は次のように述べています。

ここでは、インデックスがキーとして使用され、任意の型を持つことができます。これは連想配列のインターフェースです。連想配列は、任意の型のインデックスを持つ配列です。

連想配列で任意の型が何を意味するのか、誰でも説明できますか?

4

3 に答える 3

9

配列は通常、要素の位置によってインデックスが付けられます。単純な配列 -int x[10]には、その要素がありますx[0] ... x[9]。インデックスは符号なし整数値です。

連想コンテナーとは、インデックスが任意の (必ずしも符号なし整数であるとは限らない) 型 (この場合はstd::string) である可能性があることを意味します。

于 2013-03-06T14:22:16.240 に答える
2

これは、任意のキー タイプを任意の値タイプに一致させるマップを作成できることを意味します。

std::strings をfloats に、shorts をYourClasses に、またはYourOtherClassにマップするマップを作成できますYetAnotherClass

std::map<void *, void *>任意のポインターを他のポインターにマップできる を作成することもできます。ポインターが指しているデータの型を見つける方法がないため、これは使用に問題があります。

于 2013-03-06T14:23:58.767 に答える
2

ベクトル/配列の違いは、ほとんどの人がシーケンス コンテナーと呼ぶものですが、実際にはキーが 0 から N までの整数の完全な範囲である連想コンテナーと見なすことができます。

一方、マップはキーにそのような制限を課しません。キーは文字列、整数、任意の型にすることができます (もちろん、その型に合理的な等値比較演算子がある場合)。

于 2013-03-06T14:22:44.550 に答える