На этом шаге мы рассмотрим пример использования отображения как ассоциативного массива.
В следующем примере показано, как использовать отображение с интерфейсом ассоциативного массива. В отображении хранятся данные биржевых котировок. Элемент представляет собой пару, в которой ключом является название акции, а значением - ее цена.
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <iterator> #include <map> #include <string> #include <conio.h> //необходимо для getch() #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused using namespace std; std::string ToRus(const std::string &in) { char *buff = new char [in.length()+1]; CharToOem(in.c_str(),buff); std::string out(buff); delete [] buff; return out; } int main(int argc, char* argv[]) { // Создание отображения / ассоциативного массива // - ключи - тип string // - значения - тип float typedef map<string,float> StringFloatMap; StringFloatMap stocks; // Создание пустого контейнера // Вставка нескольких элементов stocks["BASF"] = 369.50; stocks["VW"] = 413.50; stocks["Daimler"] = 819.00; stocks["BMW"] = 834.00; stocks["Siemens"] = 842.20; // Вывод всех элементов StringFloatMap::iterator pos; cout << ToRus("Исходные данные:\n"); for (pos = stocks.begin(); pos != stocks.end(); ++pos) { cout << ToRus("Акция: ") << pos->first << "\t" << ToRus("Цена: ") << pos->second << endl; } cout << endl; // Биржевой бум (все цены удваиваются) for (pos = stocks.begin(); pos != stocks.end(); ++pos) { pos->second *= 2; } // Вывод всех элементов cout << ToRus("Цены удвоены:\n"); for (pos = stocks.begin(); pos != stocks.end(); ++pos) { cout << ToRus("Акция: ") << pos->first << "\t" << ToRus("Цена: ") << pos->second << endl; } cout << endl; // Переименование ключа "VW" в "Volkswagen" // - возможно только с созданием нового элемента stocks["Volkswagen"] = stocks["VW"]; stocks.erase("VW"); // Вывод всех элементов cout << ToRus("После переименования:\n"); for (pos = stocks.begin(); pos != stocks.end(); ++pos) { cout << ToRus("Акция: ") << pos->first << "\t" << ToRus("Цена: ") << pos->second << endl; } cout << endl; getch(); return 0; } //---------------------------------------------------------------------------
Программа выводит следующий результат:
Рис.1. Результат выполения приложения
На следующем шаге мы продолжим рассматривать примеры.