![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Syberex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
Трабла такая, есть текстовый файл 1,6 мегабайта, там 170 000 слов, в конце слов энтеры, необходимо убрать и создать хеш таблицу.
Требования: поиск, запись, чтение.И самое главное чтоб быстро работало .Как сделать??? Поиск в масиве таким способом идёт 200 раз в секунду проход 1,6 мегобайта, но я хочу хеш, чтоб можно было слова и во внутрь добовлять. Что такое хеш я знаю, но вот как это слепить воедино так и не нашёл. Кто подскажет? int handle=open("D:\\slovar11.txt",O_CREAT); //0x0100 long LenFile=filelength(handle); close (handle); fstream in("D:\\slovar11.txt"); char *ch=new char[LenFile]; in.read(ch,LenFile); in.close(); ........ ........ delete ch; --------------------
whole power in artificial intelligences |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
а почему бы std::map не юзать?
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Syberex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
вот чёто я не долюбливаю эту стд, органически у меня к ней не сварение. А примерчик есть?
--------------------
whole power in artificial intelligences |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
std::map<std::string, int> someMap;
... someMap[word] = id++; -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Syberex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
мне это не очём не говорит
![]() --------------------
whole power in artificial intelligences |
|||
|
||||
kondr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.11.2005 Репутация: нет Всего: 1 |
А зачем в качестве ключа строку использовать? Если хэш будет расчитываться, то ключом должно быть некоторое числовое значение. А вообще я не понимаю зачем тут хэш. Просто использовать set<string> и все. Слова будут лексикографически упорядочены и поиск бинарный. Ну вставка (в смысле начальное считывание слов в set) конечно будет немного медленновата, но это ж только один раз... Хотя поиск по строкам наверное дорого стоит... Может действительно хэш лучше... Это сообщение отредактировал(а) kondr - 22.9.2006, 14:52 |
|||
|
||||
kondr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 24.11.2005 Репутация: нет Всего: 1 |
Короче вот так я бы сделал:
убого, но смысл понятен ![]() |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
а что еще ключем может быть??? -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
Syberex |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 15.9.2006 Где: Украина Репутация: нет Всего: нет |
Ребят всё конечно круто, но мне одного не понятно, хеш должен возвращать указатель на значение в файле, токо одна МАЛЕНЬКАЯ проблемка, как она его вернёт правильно, если если слова там разной длины, и при всавке и удалении слов, даже 10-ка, уже идёт сильное смещение указателей, и всё становиться крайне не эффективно, я так подозреваю, что хешь функция должна как-то модифицироваться после каждого слова, а это уже полный бред.
![]() --------------------
whole power in artificial intelligences |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
170000 слов - это не так уж много: загрузи в память и не парься. Если все же хочешь работать с файлом, то сделай map строка->позиция в файле. Новые слова добавляй взад. Если нужно удалять - введи дополнительный флаг.
Лучше, конечно, использовать hash_map, а не map, если твоя stl поддерживает. -------------------- ... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |