Шаг 181.
Библиотека STL.
Контейнеры STL. Примеры. Отображение как ассоциативный массив

    На этом шаге мы рассмотрим пример использования отображения как ассоциативного массива.

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

//---------------------------------------------------------------------------

#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. Результат выполения приложения

    На следующем шаге мы продолжим рассматривать примеры.




Предыдущий шаг Содержание Следующий шаг