То есть, например, класс TreeSet из коллекций языка Java?
Это надо смотреть, что у него внутри (скорее всего да, какое-нибудь классическое дерево).
Для вашей задачи есть два стандартных подхода - на основе деревьев и хеш-таблиц. В стандартной библиотеке любого популярного языка наверняка есть минимум одно из них, а скорее и то и другое.
Асимптотику того и другого можно посмотреть в любой книжке по алгоритмам. Если вам нужны какие-то более хитрые требования - сформулируйте.
То есть деревья ломаются, если есть одинаковые элементы?
В принципе ничто не мешает в дереве хранить и узлы с одинаковым ключом (требуем чтобы значения в правом поддереве были больше либо равны значению в узле, а не строго больше). Позволяет ли это делать конкретная реализация - зависит от реализации.