Отображение как ассоциативный массив


Если в предыдущем примере заменить multimap на mар, программа выведет те же данные без дубликатов (значения могут быть теми же). С другой стороны, набор пар «ключ/значение» с уникальными ключами также можно рассматривать как ассоциативный массив. Рассмотрим следующий пример:

#include "stdafx.h"

#include <iostream>

#include <map>

#include <string>

using namespace std;

 

int main()

{

/* Тип контейнера;

* - map: элементами являются пары "ключ/значение"

* - string: ключи относятся к типу string

*- float: значения относятся к типу float

*/

typedef map<string, float> StringFloatMap;

StringFloatMap coll;

// Вставка элементов в коллекцию

coll["VAT"]=0.15;

coll["Pi"] = 3.1415;

coll["an arbitrary number"] = 4983.223;

coll["Null"] = 0;

 

/* Вывод содержимого коллекции

* - перебор всех элементов

* - компонент first содержит ключ

* - компонент second содержит значение */

StringFloatMap::iterator pos;

for (pos = coll.begin() ; pos != coll.end(); ++pos) cout << "key: = " << pos->first << "\t"<< "value: = "<<pos->second << endl;

}

В объявлении типа контейнера должны быть указаны оба тана (ключа и значения):

typedef map<string, float> StringFloatMap;

При работе с отображениями операция вставки может осуществляться оператором индексирования []:

coll ["VAT"] = 0.15;

coll["Pi"] = 3.1415;

coll["an arbitrary number"] = 4983.223;

соll['Null”] = 0;

Индекс используется в качестве ключа и может иметь произвольный тип. Такой интерфейс типичен для ассоциативных массивов. Ассоциативным массивом называется массив, индекс которого может относиться к произвольному типу (не обязательно числовому).

Обратите внимание: оператор индексирования в данном случае работает не так, как обычный оператор индексирования массивов. Отсутствие элемента, связанного с индексом, не является ошибкой. При появлении нового индекса (или ключа) создается и вставляется в контейнер новый элемент, ключом которого является указанный индекс. Таким образом, в ассоциативных массивах индекс в принципе не может принимать недопустимое значение. Следовательно, в команде соll [“Null"] = 0 из рассмотренного примера создается новый элемент с ключом "Null". Оператор присваивания связывает этот ключ со значением 0, преобразованным к типу float.

Оператор индексирования не может использоваться с мультиотображениями. Мультиотображение допускает наличие нескольких элементов с одинаковыми ключами, поэтому оператор индексирования, работающий только с одним значением, в этом случае оказывается бесполезным. Как было показано ранее, при вставке элементов в мультиотображение необходимо конструировать пары «ключ/значение». Такой способ подходит и для отображений.

При обращении к ключу и значению элемента мультиотображения, как и в случае с отображениями, используются компоненты first и second структуры pair. Результат работы программы выглядит так:

key:= "Null” value:= 0

key: “Pi” value:= 3.1415

key: "VAT” value: 0.15

key: ="an arbitrary number" value: =4983.22

 



Дата добавления: 2020-12-11; просмотров: 347;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.007 сек.