Примеры использования ассоциативных контейнеров. Примеры использования отображений и мультиотображений

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

   
Элементами отображений и мультиотображений являются пары "ключ/значение", поэтому синтаксис объявления, вставки и обращения
к элементам несколько изменяется. Пример использования мультиотображения:

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

#include <vcl.h>
#include <iostream>
#include <map>
#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[])
{
  // Тип коллекции
  typedef multimap <int,string> IntStringMMap;

  IntStringMMap coll; // Контейнер для хранения пар int/string
  // Вставка элементов в произвольном порядке
  // - значение с ключом 1 вставляется дважды.
  coll.insert(make_pair(5,"нами"));
  coll.insert(make_pair(2,"строки"));
  coll.insert(make_pair(1,"Эти"));
  coll.insert(make_pair(4,"созданному"));
  coll.insert(make_pair(6, "мультиотображению"));
  coll.insert(make_pair(1,"Вот эти"));
  coll.insert(make_pair(3,"принадлежат"));

  // Вывод содержимого контейнера
  // - перебор всех элементов
  // - переменная second содержит значение.
  IntStringMMap::iterator pos;
  cout << ToRus("Мультиотображение:\n");
  for (pos=coll.begin(); pos != coll.end(); ++pos) { 
    cout << ToRus(pos->second) << ' ';
  }
  cout << endl;

  getch();
  return 0;
}
//---------------------------------------------------------------------------

Текст этого примера можно взять 94 шаге, можно заметить два основных различия.

  • Элементы представляют собой пары "ключ/значение", поэтому для вставки элемента в коллекцию необходимо создать объект pair.
    Задача решается с помощью вспомогательной функции make_pair().
  • Итератор ссылается на пару "ключ/значение", поэтому мы не можем просто направить его в выходной поток данных. Вместо этого приходится
    работать с отдельными членами структуры pair, которым присвоены имена first и second (тип pair представлен
    на 56 шаге). Следовательно, выражение pos->second определяет второй компонент пары "ключ/значение",
    то есть значение элемента мультиотображения. Как и в случае с обычными указателями, это выражение представляет собой сокращенную запись
    для (*pos).second. Аналогичное выражение pos->first определяет первый компонент пары "ключ/значение"; в нашем примере
    это ключ элемента мультиотображения. Мультиотображения также могут использоваться в качестве словарей.

       
    На следующем шаге мы рассмотрим отображение как ассоциативный массив.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий