Не думаю, что кто-то еще ответил на другую часть вопроса.
Причиной использования hash_set или unordered_set является обычно время поиска O (1). Обычно я говорю, потому что очень часто, в зависимости от реализации, хеш может быть скопирован в более крупный хеш-массив, или хеш-корзина может содержать тысячи записей.
Причина использования набора в том, что вам часто требуется самый большой или самый маленький член набора. У хэша нет порядка, поэтому нет быстрого способа найти самый маленький элемент. У дерева есть порядок, поэтому самое большое или самое маленькое очень быстро. O (log n) для простого дерева, O (1), если оно содержит указатели на концах.