Форум программистов, компьютерный форум CyberForum.ru

Работа с частотным словарем - C++

Восстановить пароль Регистрация
 
ganiev1
0 / 0 / 0
Регистрация: 02.12.2010
Сообщений: 8
28.06.2014, 03:03     Работа с частотным словарем #1
Доброго времени суток.
Необходимо из большого файла ~100Мб загрузить в map пару (ключ, значение), где ключ это string слово, а значение int - какое-то число (частота его повторений в разных текстах).
Вот пример из текстового файла
Код
adsd 10
cfff 30
ddd 40
ddx 50
ddc 30
feee 10
gffff 50
vsd 10
Поскольку файл довольно большой, то я загружаю его полностью в в один большой string и из этого string'a делаю строковой поток, чтобы можно было читать его, как будто это файл.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
typedef map <string, int> map_sl;
 
int main()
{
    map_sl w_dict;
    string key;
    int value;
 
    ifstream in("hello.dic");
    istreambuf_iterator<char> it(in);
    string contents(it,std::istreambuf_iterator<char>());
    istringstream mstr(contents);
    while (!mstr.eof())
    {
        mstr >> key >> value;
        w_dict.insert(make_pair(key,value));
    }
Считывание из файла в строку занимает 1,5 секунды , а вот из строки в map считывание занимает бесконечное количество времени.
Можно ли ускорить это дело или лучше использовать нечто совсем другое?
Используемая среда VS 2012
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.06.2014, 03:03     Работа с частотным словарем
Посмотрите здесь:

C++ Работа со структурами, работа с векторами.
Организация работы со словарем: загрузка/выгрузка, поиск слов с заданным корнем C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.06.2014, 04:28     Работа с частотным словарем #2
Цитата Сообщение от ganiev1 Посмотреть сообщение
Поскольку файл довольно большой, то я загружаю его полностью в в один большой string и из этого string'a делаю строковой поток, чтобы можно было читать его, как будто это файл.
Смысл? Можно просто из файла читать:
C++
1
2
3
 
while (in >> key >> value)
    w_dict.insert(make_pair(key, value));
SlavaSSU
213 / 158 / 44
Регистрация: 17.07.2012
Сообщений: 580
28.06.2014, 09:31     Работа с частотным словарем #3
ganiev1, захешировать строки и делать map<long long, int> M?
Yandex
Объявления
28.06.2014, 09:31     Работа с частотным словарем
Ответ Создать тему
Опции темы

Текущее время: 22:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru