|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
Контейнер hash_map17.06.2013, 02:12. Показов 13101. Ответов 55
Метки нет (Все метки)
Здорова!
Нужно создать контейнер hash_map это тот же контейнер как и map, только он в разы иногда раз в 10-20 быстрее осуществляет поиск элементов по ключу чем стандартный контейнер map, поэтому если нужен быстрый поиск, то советуют использовать свой hash_map. В общем ребятки какой будет алгоритм создания? Я видел внутреннее представление этого контейнера, так там внутри просто два вектора, один с объектами, а второй с указателями. Интересно как же он работает или по какому алгоритму его строить? Это задачка из книги Страуструпа. Нужно потом будет еще создать hash_set, hash_multiset или я точно не помню еще какието.
0
|
|
| 17.06.2013, 02:12 | |
|
Ответы с готовыми решениями:
55
Контейнер на пободия hash_map. Hash_map unordered_map <hash_map> is deprecated and will be REMOVED |
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|||||||||||
| 20.06.2013, 14:05 [ТС] | |||||||||||
|
Тут снова ошибка вылазить
Вот код:
ошбика: 1>------ Построение начато: проект: test, Конфигурация: Debug Win32 ------ 1> main.cpp 1>c:\program files\microsoft visual studio 10.0\vc\include\xutility(2692): error C2440: =: невозможно преобразовать "const int" в "Entry *" 1> Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции 1> c:\program files\microsoft visual studio 10.0\vc\include\xutility(2715): см. ссылку на создание экземпляров функции шаблон при компиляции "void std::_Fill<Entry**,_Ty>(_FwdIt,_FwdIt,co nst _Ty &)" 1> with 1> [ 1> _Ty=int, 1> _FwdIt=Entry ** 1> ] 1> c:\test\test\test\main.cpp(34): см. ссылку на создание экземпляров функции шаблон при компиляции "void std::fill<std::_Vector_iterator<_Myvec>, int>(_FwdIt,_FwdIt,const _Ty &)" 1> with 1> [ 1> _Myvec=std::_Vector_val<Entry *,std::allocator<Entry *>>, 1> _FwdIt=std::_Vector_iterator<std::_Vecto r_val<Entry *,std::allocator<Entry *>>>, 1> _Ty=int 1> ] ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== Если я просто через итератор обнуляю то все нормально, что в книге тогда ошиблись? От шаблон класса fill:
0
|
|||||||||||
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
||||||
| 20.06.2013, 14:13 | ||||||
|
А каким боком это относится к хеш таблицам?
1
|
||||||
|
Форумчанин
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||
| 20.06.2013, 14:19 | |||||||
хоть это и криво
1
|
|||||||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 20.06.2013, 14:34 [ТС] | ||
|
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 20.06.2013, 14:37 | ||||||
|
Если С++11 нет
1
|
||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 20.06.2013, 14:55 | |
|
2
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|||||||||||||||||||||
| 20.06.2013, 15:06 [ТС] | |||||||||||||||||||||
|
Я уже тут с книги тот код что есть как бы запустил и чуток протестил кое что.
Вот файл hash_map.h:
От как вы думаете правильно ли я все сделал, там файлы слепил? Структура шаблона правильная или нет? Мб как то лучше можно сделать само оформление? В логику программы не вникаем это мелочь. Добавлено через 1 минуту А еще отето от что за фигня в книге она есть, я просто ее закоментировал, что бы не мешалась?
Это похоже какой то конструктор преобразования наверно? Наверно два итератора принимает начало и конец, в общем хз. Добавлено через 51 секунду Да точно конструктор преобразования.
0
|
|||||||||||||||||||||
|
415 / 411 / 95
Регистрация: 06.10.2011
Сообщений: 832
|
|
| 20.06.2013, 15:07 | |
|
0
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 20.06.2013, 15:15 [ТС] | |
|
Сама хеш таблица как создается не понятно от если у нас в b всего 101 ячейка, а в v ничего нету (это при пустом hash_map), то что ж тогда хешь функция должна генерировать хэш в пределах 0-101?????? , а если она случайно сгенерирует 102 и мы попытаемся в b[102] записать какое то значение это что будет UB ??
Добавлено через 2 минуты Даже не 102, а 101.
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 20.06.2013, 15:40 | |
|
Tulosba, Да, с пустым я конечно протормозил.) Спасибо.
0
|
|
| 20.06.2013, 15:44 | |
|
Не по теме: ForEveR, хорошо быть модератором. Взял подправил
1
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 27.06.2013, 19:57 [ТС] | |
|
А как же сделать hash_multimap ????? Как в нем будет хэш использоваться? В multimap вроде как нету операции operator[]() ???
0
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 28.06.2013, 20:44 [ТС] | |
|
Что никто не знает как хэш использовать в контейнерах hash_multimap, hash_set и hash_multiset????????
Там просто нету operator[]() поэтому фиг его знает как поиск осуществлять, не ну понятно как делать поиск перебрать все элементы, ну а как хэш привязать? Или просто сделать копии multimap, set и multiset и не парится с хэшем ????? Хотябы примитивные копии с итераторами и все, я думаю пол задачи сделаю, на троечку ???
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 28.06.2013, 21:04 | |
|
@ninja2, Читаем - просвещаемся. http://en.cppreference.com/w/c... d_multimap
0
|
|
|
|
|
| 28.06.2013, 21:19 | |
|
Вообще перед всем этим делом не мешало бы просветиться в этой области. Гуглим "хеш таблицы с цепочками коллизий" и "хеш таблицы с открытой адресацией". Плюс еще методы хеширования (мультипликативный, т.н. квадратичный и т.д.). Далее формулы выбора размера таблицы в зависимости от типа ключа и метода хеширования, ну и т.д. и т.п.
Тупо опираясь на справку по STL такие вещи не напишешь.
0
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 28.06.2013, 23:24 [ТС] | |
|
Та там долго вникать, я так подумал, наверно я просто сделаю multimep, set и multiset как аналоги из стл, быстрее будет, а то с хэшем долго затянится, когда нибудь в другой раз вникну, хоть на половину задачку сделаю на троечку.
Добавлено через 1 минуту @Kastaneda, Да да это похоже головняк.
0
|
|
| 28.06.2013, 23:24 | |
|
Помогаю со студенческими работами здесь
56
Hash_Map Error (C2338) Stdext::hash_map и std::map Ошибка <hash_map> при выполнении программы Чем отличается map и hash_map в плюсах? контейнер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|