|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
Зачем нужны хэш контейнеры?13.08.2016, 22:34. Показов 4269. Ответов 6
Метки нет (Все метки)
Привет всем) Собственно такой вопрос: зачем нужны хэш контейнеры? В чем разница между стандартными контейнерами STL? Эффективность и тд?
Никогда не пользовался ими в коде, поэтому прошу по-подробней)
0
|
|
| 13.08.2016, 22:34 | |
|
Ответы с готовыми решениями:
6
Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? |
| 13.08.2016, 22:48 | |||
Сообщение было отмечено gru74ik как решение
Решение
0
|
|||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 15.08.2016, 18:55 [ТС] | |
|
gazlan, ничерта не понял. Я в курсе что хэш-контейнер(хэш-таблица) это ассоциативный контейнер. Но разница между стандартными ассоциативным контейнерами и хэш контейнерами в чем? Нужно ли их использовать в реальных проектах?
1
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|||||||||||
| 15.08.2016, 19:18 | |||||||||||
Сообщение было отмечено gru74ik как решение
Решение
Bretbas, я в хэше тополь, но попробую объяснить как понимаю, поэтому не серчайте:
Есть std::vector, доступ к элементу через индекс - это взяли начало и прибавили к нему индекс - всё просто. Адрес + число = адрес. Если std::map доступ к нему по ключу, к примеру это структура Student ( std::string name, std::string surname, int age) - поиск по std::map это сравнение строк между собой - если имена одинаковые, сравниваем фамилии, если имя и фамилия одинаковые - сравниваем возраст. Сравнение строк это трудоемкий процесс - и как-то не очень получается.Есть хэш-контейнеры, ты знаешь, что студентов может быть не больше 700 в университет к примеру, следовательно вставляя в контейнер студента при предоставляешь контейнеру число от 0 до 700. Который называется хэш. Берём какуе-то логику: к примеру, длину имени и фамилии + его возраст.
std::list. И что получается: Поиск студента теперь сводится к:1) std::vector.begin() + 34 2) std::find list Student seach == iterator ( итераций G ) А без hash`a: 1) std::find map Student seach == iterator ( итераций log(N) ) Если мы распределим наших 100 студентов в хэш-контейнере так, чтобы у всех был свой hash номер ( уникальный ), то и std find list будет равен 1. ИТОГО: И получаем если храним в std map нужно log(N) сравнений объектов, где есть сравнение строк, что трудоёмкое.А если в хэш-контейнере, смешение по hash-числу от начала за 1 скачёк, и если в std list 1 элемент , так же 1 скачёк. Минусы? 1) Чтобы определить hash код нужно его вычислить при вставке и поиске. 2) Написать качественную hash функцию для своего типа с своими переменными надо иметь опыт и бошку
2
|
|||||||||||
| 15.08.2016, 21:50 | ||
|
Реализация через дерево дозволяет сортировку и неограниченный рост, в обмен на относительно низкую (логарифмическую) скорость доступа. Реализация через хэш-таблицы не допускает ни того, ни другого, зато имеет предельную (практически, по индексу) скорость доступа. Реальные контейнеры, обычно, комбинируют то и другое (Ex: Hashed array tree). Используются, почти, повсеместно - например, для построения Symbol tables в компиляторах.
2
|
||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 16.08.2016, 17:43 [ТС] | |
|
Спасибо, примерно понял)
0
|
|
| 16.08.2016, 18:02 | |||||||
|
Bretbas, хеш таблицы используются в STL, в ассоциативных контейнерах с приставкой unordered.
Зачем они нужны? Иногда это ускоряет поиск по сравнению с упорядоченными контейнерами Добавлено через 15 минут
2
|
|||||||
| 16.08.2016, 18:02 | |
|
Помогаю со студенческими работами здесь
7
Зачем нужны деревья? Зачем нужны классы? Зачем нужны операторы << и >> Зачем нужны классы?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Programma_Boinc 10.04.2026
Видеокарта простаивает ночами? Вот 4 проекта, которые загрузят её наукой
Если на Windows стоит дискретная NVIDIA или AMD — можно отдать её вычислительную мощность реальным исследованиям. . . .
|
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях.
Задача: при копировании документа очищать определенные реквизиты и табличную. . .
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|