Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2009, 19:42   #1
Chartvit
Пользователь
 
Регистрация: 14.09.2009
Сообщений: 15
Вопрос Multimap

Пишу программу "англо-русский словарь". Нужно использовать класс Multimap, но возник вопрос. Пишу на вижуале 2008, и при создании проекта приложения для виндовс, как все знают, создаются несколько ".cpp" файлов.Обработку и операции обьектов я писал в файле который имеет название формы (Form.cpp) и за нее отвечает. Но есть и главный файл (project_name.cpp) с именем проекта....Вопрос собственно в том, где мне писать сам класс в виде которого должен быть представлен сам словарь???(не судите строго- я новичок).
Chartvit вне форума Ответить с цитированием
Старый 20.11.2009, 20:01   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Создать для класса одноимённые *.h и *.cpp файлы и в них писать прототип и реализацию класса соответственно. В нужных файлах с классами форм или еще с чем созданный *.h файл с прототипом класса инклюдить и работать как со всеми остальными классами.
pu4koff вне форума Ответить с цитированием
Старый 20.11.2009, 20:54   #3
Chartvit
Пользователь
 
Регистрация: 14.09.2009
Сообщений: 15
Вопрос

А собственно еще один вопрос....Можете посоветовать, как мне представить саму работу этого ассоциативного контейнера Multimap, я сомневаюсь при выборе пути его написания, алгоритма его работы с самой базой слов, ну то есть с текстовым файлом.
Chartvit вне форума Ответить с цитированием
Старый 20.11.2009, 21:06   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Chartvit Посмотреть сообщение
А собственно еще один вопрос....Можете посоветовать, как мне представить саму работу этого ассоциативного контейнера Multimap, я сомневаюсь при выборе пути его написания, алгоритма его работы с самой базой слов, ну то есть с текстовым файлом.
Свой нужно мультимап собрать или готовый из СТЛ пойдёт?
Ну создайте текстовый файл со структурой:
Код:
слово_на_англицком=слово_на_русском
Прочитали строку, разделили на два куска, ориентируясь на равенство и занесли левую часть в ключ, а правую - в значение.
При старте программы все слова из файла в мультимап слили и по нему уже потом ищете. Для небольшого объема данных пойдёт, ну а для больших словарей уже нужно специализированную СУБД создавать пожалуй, но это учебное задание и потому и с простым файлом пойдёт
pu4koff вне форума Ответить с цитированием
Старый 21.11.2009, 00:09   #5
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 218
По умолчанию

у меня одногруппник делал переводчик и употреблял ХЭШ, но есть вариант и деревья...бинарные вроде, так называются
Olejik вне форума Ответить с цитированием
Старый 21.11.2009, 14:12   #6
Chartvit
Пользователь
 
Регистрация: 14.09.2009
Сообщений: 15
Вопрос

У меня задание использовать исключительно мультимэп. Вот наоснове этого возникили проблемы...Не получается написать сам класс, в виде которго должен быть представлен словарь...То есть основную функцию которую должен выполнять словарь, перевод слова...
Chartvit вне форума Ответить с цитированием
Старый 21.11.2009, 21:46   #7
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Как-то так:
Код:
#include <string>
#include <multimap>
...
multimap<string, strig> words; // Это и есть наш словарь
...
// Добавление элементов
words.insert(pair<string, string>("i","я"));
words.insert(pair<string, string>("word","слово"));
...
// Поиск слова
multimap<string, strig>:: iterator i;
i = words.find("word");
if (i == words.end())
{
  cout << "слово \"word\" не найдено" << endl;
}
else
{
  cout << "Перевод слова \"word\": " << i->second << endl;
}
Ну, соответственно, ввод переделать на чтение данных из файла и всего делов. Ну и соглашение для себя принять нужно в каком регистре слова хранить и проверять. Все введённые пользователем слова для поиска соответственно переводить в верхний/нижний регистр для поиска, а то получится, что в словаре: "WORD", а пользователь ввёл: "wOrD" и слово не найдётся. Для этого можно сделать класс-обёртку для multimap'a с автоматическим переводом всех слов в один регистр. Ну и так вариантов перевода одного и того же слова может быть много, вместо find нужно использовать метод equal_range (если с названием не напутал). Он возвращает итератор на все элементы с указанным ключом, а find - только на один элемент с указанным ключом.

Или всё же мультимап нужно свой собственный ручками написать?
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запись содержимого STL::multimap в файл с сохранением пар nimizida Общие вопросы C/C++ 4 29.09.2009 17:03