|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
Unordered_map правильное применение25.11.2017, 15:26. Показов 14764. Ответов 62
Метки нет (Все метки)
Решил разобраться с этим контейнером, но не вижу ни одной комплексной сатьи по этой теме.
Кто нибудь может ответить на простые вопросы: 1)Имеют ли данные контейнеры практический смысл в сравнение с вектором у которого свой аллокатор ? 2)Я так понимаю что контейнер малопригоден в готовом виде с параметрами по умолчанию ? 3)Если его использовать не в готовом, то хеши надо солить. а солить можно по разному и есть ли какая нибудь удачная реализация (так как чувствую что создам велосипед, если буду делать сам) ? 4)Чем отличается реализация boost unordered_map от std::unordered_map?
0
|
|
| 25.11.2017, 15:26 | |
|
Ответы с готовыми решениями:
62
Правильное применение функций
|
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 25.11.2017, 21:37 [ТС] | |
|
IGPIGP, Постановка задачи предполагает что данные случайны. Не уверен что приведу хороший пример, но я больше думую в сторону транспортных задач (всякие хеши сессий, скрытые за NATом).
Коллизии приемлемы тогда, когда ситуация управляемая, но как управлять ситуацией не имея представления и содержимом ? Интерфейс unordered_map/unordered_set даже не даёт средств для поиска коллизий. Эти структуры данных могут быть частью какого нибудь сервера, работающего в режиме 24/7. Добавлено через 11 минут Подмешивание псевдослучайных данных как средство от коллапса, когда стало много одинаковых данных, или мы пришли в подмножество данных где коллизии вероятны.
0
|
|
|
Комп_Оратор)
|
||
| 25.11.2017, 21:37 | ||
|
То есть, порядок поступления (если в этом заключается случайность) не имеет тут значения. Для map/set - бинарных деревьев - имеет.
0
|
||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 25.11.2017, 21:43 [ТС] | |
|
IGPIGP, Случайны по размеру, по содержимому, по порядку поступления. По природе своей случайны, например пакеты в сетевом трафике (плохой пример, но это первое что пришло в голову). Я не рассматриваю тут деревья, только un_ordered_map, unordered_set.
0
|
|
|
Комп_Оратор)
|
|||
| 25.11.2017, 21:43 | |||
0
|
|||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 25.11.2017, 21:54 [ТС] | |
|
IGPIGP, Данные случайны. Нельзя их изучить. Зато надо управлять ситуаций. "Горе" это не инженерный термин.
Сами по себе структуры unordered_map/set данных без инструментов работы с ними, вызывают опаску. Както нужно вовремя бяку обнаружить или предотвращать. Подмешивание в общем случае может быть трёхкомпонентным. Первый компонент - постоянная случайная константа, второй компонент периодическая константа из масссива констант (изменяемая циклически по модулю) и третья компонента это случайное число для конкретного элемента, которое хранится вместе с хешем. Также нужен инструментарий обнаружения коллизий. Третья компонента конечно делает ненужным первые две компоненты.
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 25.11.2017, 21:55 | ||
|
Тогда по какому условию эти данные различаются, и кто будет заниматься высвобождением таблицы от них? Так-то предположу что это должно быть что-то наподобие хэш-таблицы списков. А вообще в этом случае нужно изменять алгоритм построения ключа.
0
|
||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
||
| 25.11.2017, 22:02 [ТС] | ||
0
|
||
|
Комп_Оратор)
|
|||
| 25.11.2017, 22:06 | |||
|
0
|
|||
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 25.11.2017, 22:07 | |
|
Pechkin80, а запрашивать данные тогда как собираетесь? Наподобие
"найти машину белого цвета "Лада Калина" " - и вываливается список из нескольких десятков тысяч "лад калин" с данными о них. Что со списком-то делать будете?
0
|
|
|
|
|
| 25.11.2017, 22:09 | |
|
То, что ты описываешь сводится к одному - не используй хеш таблицы. Профессионализм в том и заключается, чтобы понять какая структура данных тебе нужна. std::unordered_map не универсален и нужен лишь для ограниченного круга задач. И вот когда он действительно нужен ты рад, что разработчики компилятора (и языка) тебе предоставили готовое решение.
0
|
|
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 25.11.2017, 22:23 [ТС] | |
|
TRam_, Если программа заточена под конкретный тип данных, то это уже минус. Я не спорю, что никакая структура данных не является универсальной и надо выбирать структуру данных в зависимости от природы данных, но давайте не уводить обсуждение в сторону. Мне интересно знать есть ли готовый инструментарий работы с unordered_map/unordered_set а не философски разговоры о смысли жизни ?
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||
| 25.11.2017, 22:46 | |||
class Hash, который создаёшь и в котором нужно только переопределить
Обработка коллизий будет сделана автоматически. Но останется условие, что задав один ключ найдётся один набор данных. Или вставится/обновится один набор данных. Случай 2, что нам надо для одного и того же ключа набирать много наборов данных. Тогда для unordered_map аргументом class T должен быть list<DataType>, т.е. по ключу получаете ссылку на список, и далее с этим списком поэлементно работаете. Роясь в данных, которые насобирали для этого ключа. Добавлено через 7 минут Если данные имеют неизвестный размер и каждый раз разное содержимое, внутри у DataType должен быть некий идентификатор содержимого (ведь нужно же знать, как и в каком порядке обрабатывать), указатель на содержимое (которое динамически выделено) и, если нужно, размер этого выделенного содержимого. Всё. Можно заполнять и радоваться. Но не забыть сделать систему очистки от вышеупомянутого динамически выделенного содержимого, а остальное, в основном, контейнеры сгенерируют за вас. И удаление по ключу, и удаление по ключу и собственно итератору к контейнеру данных, и добавление/удаление "пустого"/"не пустого" списка или элемента списка.
0
|
|||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 25.11.2017, 22:50 [ТС] | |
|
TRam_, Спасибо, но мало, хотя использовать свой хеш тоже важно. Вот есть уже готовый unordered_map, который стоит себе в программе. Может даже его какой то разработчик ошибочно поставил и он нахрен не нужен, а программа тормозит. Вот задача провести диагностику и выявить действительно ли unordered_map был использован не по назначению или ключ выбран неудачно и что появилось много коллизий. А что касается кастомной хеш-функции, то её неплохо бы сделать дружественной (если уже не сделали). Чтобы она могла подмешивать, в зависимости от индекса массива по модулю Х.
0
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||||||
| 25.11.2017, 23:00 | ||||||
|
Pechkin80, Создается впечатление, что вы вообще не понисаете, как работает хэш таблица.
Задача: Найти в таблице по ключу (ключ - строка "Вася Пупкин") данные о нем. У вас есть только строка "Вася Пупкин". Откуда вы возьмете свои случайные подмешанные данные?
1
|
||||||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 25.11.2017, 23:05 [ТС] | |
|
avgoor, Ну это не центральный вопрос про подмешивание. Потом подробно объясню и наверно даже скетч какойнить накатаю чтобы лучше было понятно, что я имею ввиду.
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|||
| 25.11.2017, 23:08 | |||
|
Pechkin80, по поводу диагностики - http://www.cplusplus.com/refer... ad_factor/
Чем меньше будет этот коэффициент, тем больше будет места хэш-таблицы приходиться на 1 пару элементов, тем меньше будет вероятность коллизий. Попробуйте поставить что-то наподобие 0.5 или вовсе 0.1 (на 1 добавляемый элемент будет приходиться 10 свободных мест, т.е. очень мала вероятность коллизий). Но это повлечёт увеличение расходов памяти на собственно таблицу. Значительно. Проверять "степень заполнения" с помощью http://www.cplusplus.com/refer... ad_factor/ Добавлено через 2 минуты
0
|
|||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 25.11.2017, 23:09 | ||
|
Пока что вы хотите улучшить что-то, непонимая как оно работает.
2
|
||
|
21 / 19 / 7
Регистрация: 14.03.2014
Сообщений: 249
|
|
| 25.11.2017, 23:17 [ТС] | |
|
TRam_, max_load_factor, load_factor это я видел, но как найти коллизию в конкретном месте. Неужили только трассировка в отладчике ? Както иначе можно ? Есть же фичи для поиска утечек в памяти, может и для коллизий есть чтото подобное.
0
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
||
| 25.11.2017, 23:21 | ||
Сообщение было отмечено Pechkin80 как решение
РешениеДобавлено через 49 секунд Просто я абсолютно не уверен, что тормоза программы связаны именно с коллизиями.
1
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 25.11.2017, 23:24 | ||
|
При любой адекватной хэш функции (при равномерном распределении) вероятность коллизий одна и та же.
0
|
||
| 25.11.2017, 23:24 | |
|
Контейнер unordered_map<string, unordered_map<string,int>> Правильное применение с basic_stream Правильное применение ! Правильное применение токового зеркала VAO, VBO и их правильное применение Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|
|
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки.
Добавлены следующие реквизиты типа Булево:
- Буквы;
- Цифры;
- Символы.
Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
|
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей.
Самым главным критерием для. . .
|
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store.
И так:
1. Скачиваем с. . .
|
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге).
Задача:
Программно добавить префикс в нумерацию документов.
Решение:
В модуле объекта. . .
|