std::set и std::unordered_set используются для хранения уникальных элементов. Выбор между ними зависит от приоритетов: упорядоченность или производительность доступа/вставки/удаления.
std::set основан на сбалансированном бинарном дереве поиска (обычно красно-черном дереве).
Характеристики std::set:
std::unordered_set основан на хеш-таблице.
Характеристики std::unordered_set:
std::hash) и оператор сравнения на равенство (operator==).Сводная таблица:
| Критерий | std::set | std::unordered_set |
|---|---|---|
| Внутренняя структура | Сбалансированное дерево | Хеш-таблица |
| Порядок элементов | Отсортированный | Неотсортированный |
| Время поиска/вставки/удаления (среднее) | O(log N) | O(1) |
| Время поиска/вставки/удаления (худшее) | O(log N) | O(N) |
| Требования к типу | Оператор < | std::hash, operator== |
Пример использования std::set:
c
Пример использования std::unordered_set:
c