На этом шаге мы рассмотрим использование мультиотображение для моделирования словаря.
В следующем примере демонстрируется словарь (мультиотображение, в котором ключи и значения относятся к строковому типу).
//--------------------------------------------------------------------------- #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. Результат выполения приложения
На следующем шаге мы рассмотрим поиск элементов с известным значением.