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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2012, 17:46   #1
recycler
 
Регистрация: 10.04.2012
Сообщений: 4
По умолчанию Сортировка словаря

Привет ребята!
Мне бы надо программу написать на с++ в котором я очень плохо разбираюсь. Хотя с растровыми алгоритмами неплохо получалось...
Задача такая:
Словарь это текстовый файл - их может быть любое количество от 2 и т.д.
Словарь имеет такую структуру:

# слово = описание слова
# арбуз = фрукт
# машина = техника на колесах)))
# и т.д

Надо из этих словарей составить один словарь отсортированный по алфавитному порядку по полю СЛОВО.

Допустим у нас 4 файла.
Надо чтобы сначала алгоритм сортировал каждый файл в алфавитном порядке. Потом допустим сравнил 1 и 2 и отсортировал и сделал новый файл дальше сравнил 3 и 4 и отсортировал в новый файл, потом сравнил 2 новых файла и также отсортировал уже в один итоговый файл.

Просто это все надо для распараллеливания программы на нескольких процессорах с использованием MPICH который вроде как пашет только в Visual Studio по крайней мере у него есть для визуала свои библиотеки.

Хотя если кто осилит и паралельку так это ваще класс.
recycler вне форума Ответить с цитированием
Старый 10.04.2012, 18:00   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

recycler

Алгоритм решения довольно прост:

для хранения данных нам нужен контейнер, который:
1. умеет само-сортироваться при добавлении данных
2. поддерживает связь данных в виде ключ(слово) => значение
3. опционально: отсеивает дубликаты слов

если посмотреть, чё нам предлагает с++ то становится понятно, что std::map - идеальный кадидат

таким образом, схематично код выглядит так:

Код:
typedef std::map<std::string, std::string> Table;
Table table;

std::ifstream ifs;
// открытие файла, проверки...

// читаем пока не конец файла
std::string line;
while (!std::getline(ifs, line))
{
    // тут надо разбить считанную строку на пару ключ:значение
    // во всем примере это самая сложая часть
    std::string key, value;
    ... парсим строку, получаем key, value ..
    table.insert(Table::value_type(key, value));
}

дальше осталось только записать мапу обратно в файл
естессно, все это можно днлать на отдельных хостах (mpi)
а сливать данные в финале
Rififi вне форума Ответить с цитированием
Старый 11.04.2012, 21:24   #3
recycler
 
Регистрация: 10.04.2012
Сообщений: 4
По умолчанию

А как сделать переменной строку между # и = ?
recycler вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лексикографическая сортировка словаря Matr1x C# (си шарп) 4 18.03.2012 18:05
Разработка словаря ! himic888 Помощь студентам 0 02.05.2011 17:26
Создание словаря KASPEER HTML и CSS 1 05.04.2011 00:48
Создание пользовательского словаря kekur Помощь студентам 4 11.03.2008 12:10
Создание словаря tmp_user Помощь студентам 5 24.11.2007 18:30