В чем смысл ассоциативного массива?

Я читаю стандартную библиотеку С++: учебник и справочник. В примере карты:

   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;

Автор говорит:

Здесь индекс используется как ключ и может иметь любой тип. Это интерфейс ассоциативного массива. Ассоциативный массив - это массив, в котором индекс может иметь произвольный тип.

Любой может объяснить мне, что означает произвольный тип в ассоциативном массиве?

Ответ 1

Массивы обычно индексируются положением элементов. Простой массив - int x[10], имеет свои элементы x[0] ... x[9]. Индекс представляет собой целое значение без знака.

Ассоциативный контейнер означает, что индекс может быть, ну, произвольным (не обязательно беззнаковым интегральным) типом (в данном случае a std::string).

Ответ 2

Различие между векторами/массивами, которые большинство людей будут вызывать контейнерами последовательностей, но которые фактически можно рассматривать как ассоциативные контейнеры, причем ключи представляют собой полный диапазон целых чисел от 0 до N.

С другой стороны, карты не помещают такое ограничение на ключи, они могут быть строками, целыми числами, любым типом, который вы хотите (при условии, что на этом типе есть разумный оператор сравнения равенства).

Ответ 3

Это означает, что вы можете создать карту, которая соответствует произвольному типу ключа для произвольного типа значения.

Вы можете создавать карты, которые сопоставляют от std::string до float s, short до YourClass es или YourOtherClass до YetAnotherClass.

Вы даже можете создать std::map<void *, void *>, который мог бы отображать любой указатель на любой другой указатель. Хотя это было бы сомнительным, потому что не было способа узнать тип данных, на которые указывает указатель.