На этом шаге мы рассмотрим пример использования объектов некоторого класса в отображении.
Следующая программа создает простой словарь на основе отображения слов с их значениями. Сначала она создает два класса word и meaning. Поскольку отображение поддерживает отсортированный список ключей, программа также определяет для объектов типа word оператор < .
//--------------------------------------------------------------------------- #include <vcl.h> #include <iostream> #include <map> #include <cstring> #include <winuser.h> #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; } class word { char str[20]; public: word() { strcpy(str, ""); } word(char *s) {strcpy(str, s);} char *get() { return str; } }; bool operator<(word a, word b) { return strcmp(a.get(), b.get()) < 0; } class meaning { char str[80]; public: meaning() { strcmp(str, ""); } meaning(char *s) { strcpy(str, s); } char *get() {return str;} }; int main(int argc, char* argv[]) { map<word, meaning> dictionary; // Помещаем в отображение объекты // классов word и meaning dictionary.insert(pair<word, meaning>( word("дом"), meaning("Место проживания"))); dictionary.insert(pair<word, meaning>( word("программирование"), meaning("Процесс создания программы"))); dictionary.insert(pair<word, meaning>( word("клавиатура"), meaning("Устройство ввода данных"))); dictionary.insert(pair<word, meaning>( word("STL"), meaning("Standard Template Library"))); // По заданному слову находим его значение. char str[80]; cout << ToRus("Введите слово: "); cin >> str; OemToChar(str,str); map<word, meaning>::iterator p; p = dictionary.find(word(str)); if(p != dictionary.end()) cout << ToRus("Определение: ") << ToRus(p->second.get()); else cout << ToRus("Такого слова в словаре нет.\n"); // cin>> str; getch(); return 0; } //---------------------------------------------------------------------------
Результаты выполнения этой программы представлены на рисунке 1.
Рис.1. Результат работы приложения
Обращаем внимание на следующую конструкцию в программе:
cin >> str; OemToChar(str,str);
Здесь используется функция OemToChar(), которая выполняет действие, противоположное результату работы функции CharToOem(). Дело в том, что в словаре русские слова "дом", "программирование", "клавиатура" хранятся в формате Oem, в то время, как с клавиатуры при выполнении конструкции cin >> str; они вводятся в формате char. Поэтому для совмещения форматов мы используем функцию CharToOem().
Со следующего шага мы начнем знакомиться с алгоритмами.