(1)数组也能实现一种映射(map),将下标映射为下标对应的值,数组和字典甚至映射的形式都是一样的,都是使用中括号。
arr[0] = 1; m["InsideZhang"] = 23;
(2)数组能做的事,字典都能完成;而字典能做的事,数组却未必能。也即数组是 key 受限(必须为无符号整型)的字典。或者说字典是下标增强的数组。
(3)下标之于数组,如同 key 之于字典,不过数组的下标只可以是无符号整型,字典的 key 却可以是任意类型;
(4)下标对数组而言是独一无二的,不可能有两个一样的索引却指向不同的值,多个下标却可以对应相同的值。字典的 key 也是唯一的,不同的 key 也可以对应相同的 value。
arr[i] == arr[j]
(5)数组与字典的另外一点不同是,数组的下标是连续的,因为数组本身即占据着一段连续的线性空间。我们只需知道数组长度(n),即可获悉其全部合法的下标,0… n-1. 而字典对下标没有任何如此的要求,这当然也与其内存结构有关了,字典对下标(key)的全部要求正在于不允许重复(也不要求一个key对应多个value)。
1. 推论
a[-1] ?
至少存在这样的推论,如果索引需要为负(a[-1] ?)时,怎么办。此时数组是束手无策的,而只能使用字典。
或者,当你看到以负数为索引,那很大的可能即是,该对象是字典类型。
2. 等价
int arr[m][n]
等价于map<pair<int, int>, int>