我正在阅读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;
作者说:
这里,索引用作键,可以是任何类型。这是关联数组的接口。关联数组是一个数组,其中索引可以是任意类型。
任何人都可以解释一下,任意类型在关联数组中意味着什么?
答案 0 :(得分:9)
数组通常由元素的位置索引。一个简单的数组 - int x[10]
,其元素为x[0] ... x[9]
。索引是无符号整数值。
关联容器意味着索引可以是任意的(不一定是无符号整数)类型(在这种情况下,是std::string
)。
答案 1 :(得分:2)
区别在于矢量/数组,大多数人称之为序列容器,但实际上可以将其视为关联容器,其中键是完整的范围从0到N的整数。
另一方面,地图不对键有这样的限制,它们可以是字符串,整数,任何你想要的类型(前提是在那种类型上有一个合理的相等比较运算符)。
答案 2 :(得分:2)
这意味着您可以创建一个将任意键类型与任意值类型匹配的映射。
您可以创建将std::string
映射到float
,short
到YourClass
es或YourOtherClass
到YetAnotherClass
的地图。< / p>
您甚至可以创建一个std::map<void *, void *>
,它可以将任何指针映射到任何其他指针。虽然这会有问题,但是因为没有办法找出指针所指向的数据类型。