Шаг 182.
Библиотека STL.
Контейнеры STL. Примеры. Мультиотображение как словарь

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

    В следующем примере демонстрируется словарь (мультиотображение, в котором ключи и значения относятся к строковому типу).

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

#include <vcl.h>
#include <iostream>
#include <iterator>
#include <iomanip>
#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/string") 
  typedef multimap<string,string> StrStrMMap;

  // Создание пустого словаря 
  StrStrMMap dict;

  // Вставка нескольких элементов в произвольном порядке
  dict.insert(make_pair("day","день"));
  dict.insert(make_pair("strange","чужой"));
  dict.insert(make_pair("car","машина"));
  dict.insert(make_pair("smart","умный"));
  dict.insert(make_pair("trait","особенность"));
  dict.insert(make_pair("strange","странный"));
  dict.insert(make_pair("smart","щеголеватый"));
  dict.insert(make_pair("smart","модный"));
  dict.insert(make_pair("clever","щеголеватый"));

  // Вывод всех элементов
  StrStrMMap::iterator pos;
  cout.setf (ios::left, ios::adjustfield);
  cout << ' ' << setw(10) << "english "
       << ToRus("русский ") << endl; 
  cout << setfill('-') << setw(20) << " "
       << setfill(' ') << endl;
  for (pos = dict.begin(); pos != dict.end(); ++pos) { 
    cout << ' ' << setw(10) << pos->first.c_str() 
         << ToRus(pos->second) << endl;
  }
  cout << endl;

  // Вывод всех значений для ключа "smart"
  string word ("smart");
  cout << word << ": " << endl;
  for (pos = dict.lower_bound(word);
       pos != dict.upper_bound(word); ++pos) {
    cout << "     " << ToRus(pos->second) << endl;
  }

  // Вывод всех ключей для значения "щеголеватый"
  word = ("щеголеватый");
  cout << ToRus(word) << ": " << endl;
  for (pos = dict.begin(); pos != dict.end(); ++pos) {
    if (pos->second == word) {
      cout << "     " << pos->first << endl;

    }
  }

  getch();
  return 0;
}

//---------------------------------------------------------------------------
Текст этого примера можно взять здесь.

    Результат выполнения программы выглядит так:


Рис.1. Результат выполения приложения

    На следующем шаге мы рассмотрим поиск элементов с известным значением.




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