Хеш-набор - это, по сути, хеш-таблица без сохраненных значений (только ключи), а std::set
в C ++ реализованы как сбалансированное двоичное дерево поиска.
Вы должны прочитать о различиях в некоторых книгах по алгоритмам / информатике, так как у вас, похоже, есть некоторые базовые заблуждения, например, в бинарном дереве поиска стоимость поиска наименьшего / наибольшего элемента логарифмическая O(log N)
, а не постоянная O(1)
.
В зависимости от операций, которые вам нужно выполнять чаще всего, любая структура данных будет более подходящей. Если вам нужно найти самый маленький элемент довольно часто, то std::set
выполнит операцию в O(log N)
, но с хэш-таблицей вам нужно будет проверить все элементы, а это означает линейное время O(N)
. Если, с другой стороны, эта операция не является обычной и регулярные поиски (является ли элемент a в наборе?) Более распространенными, поиск в хэш-памяти с постоянным временем будет лучше, чем O(log N)
поиск в наборе.