Если вам это сойдет с рук, вы всегда должны отдавать предпочтение хешу по сравнению с бинарным деревом поиска. Хэши имеют больше памяти, чем деревья, но вся используемая ими память может быть выделена в один большой блок. Для деревьев каждый добавленный узел требует отдельного выделения, которое вызывает высокую фрагментацию и ухудшает производительность. Подобно тому, как вы предпочитаете читать 1000 байтов из 1 файла, а не 1 байт из 1000 разных файлов.
Случай, когда хэши не работают, имеет значение при заказе. Например, предположим, что вы пишете распределитель памяти и храните свободные блоки памяти в структуре данных. Ключи - это размеры блоков, а значения - указатели на них.
Запрос памяти влечет за собой просмотр этой структуры данных и поиск блока наименьшего (подразумевает упорядочение!), Удовлетворяющего запросу. Например, если у вас есть блоки с ключами 10, 20, 30 и приходит запрос на 20 байтов памяти, вы выбираете второй блок. Хэш-карта может сделать это легко.
Но что, если запрос на 22 байта? Поскольку ключа со значением 20 нет, вам нужно выполнить итерацию всего хеш-таблицы, чтобы найти правильный ключ (30), который является операцией O (n). Но если вы использовали дерево, то «найти наименьший ключ, больший, чем данный ключ» - это операция O (log n).