11

我正在阅读 C++ 标准库:教程和参考书。在地图示例中:

   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

区别在于向量/数组之间,大多数人将其称为序列容器,但实际上可以将其视为关联容器,其键是从 0 到 N 的完整整数范围。

另一方面,映射不会对键施加这样的限制,它们可以是字符串、整数、您想要的任何类型(当然前提是该类型上有一个合理的相等比较运算符)。

于 2013-03-06T14:22:44.550 回答
2

这意味着您可以创建一个将任意键类型与任意值类型匹配的映射。

您可以创建将 s 映射std::stringfloats、shorts 到YourClasses 或YourOtherClass到的映射YetAnotherClass

您甚至可以创建一个std::map<void *, void *>可以将任何指针映射到任何其他指针的指针。尽管这会产生疑问,因为没有办法找出指针指向的数据的类型。

于 2013-03-06T14:23:58.767 回答