Типичная вещь, которую нужно сделать здесь, это поддерживать массив, отсортированный по хеш-ключу, а затем использовать двоичный поиск для определения местоположения элементов, что дает наихудшую сложность времени O (log n).
Вы можете поддерживать порядок сортировки, используя тот же двоичный поиск для вставки новых элементов, что и для поиска существующих элементов.
Этот последний пункт важен: как отмечено в комментариях, сортировка перед каждым поиском ухудшает время поиска до точки, в которой линейный поиск методом грубой силы быстрее для небольших наборов данных. Но эти накладные расходы могут быть устранены; массив никогда не нужно сортировать , если вы сохраняете порядок сортировки при вставке новых элементов.