- unordered_set это контейнер для хранения несортированных уникальных значений. Подключается через #include <unordered_set>.
- Записи должны быть уникальны. При добавлении записи с существующим значением, операция будет проигнорирована.
- Для использования сортированных уникальных записей, используйте контейнер std::set.
- Для использования сортированных неуникальных записей, используйте контейнер std::multiset.
- Для использования несортированных неуникальных записей, используйте контейнер std::unordered_multiset.
| Метод | Описание | Пример | Сложность | 
|---|---|---|---|
| begin() | Возвращает итератор на первый элемент. | cout << ust.begin(); | O(1) | 
| bucket(const key_type& key) | Возвращает номер корзины в которой находится элемент. | size_t sz ust.bucket(2); | O(1) | 
| bucket_count() | Возвращает количество корзин. | size_t sz ust.bucket_count(); | O(1) | 
| bucket_size(size_t num) | Возвращает количество элементов в заданной корзине. 0 <= num < bucket_count() | size_t sz ust.bucket_size(2); | O(bucket_count()) | 
| clear() | Удаляет все элементы map. | ust.clear(); | O(n) | 
| count(const T& val) | Возвращает количество элементов имеющих значение val (0 или 1). | size_t cnt = ust.count(3); | O(1) | 
| emplace(value_type val) | Вставляет значение в контейнер. При наличии уже такого значения контейнер не меняется. | ust.emplace(5); | O(1) | 
| emplace_hint(iterator it, value_type val) | Вставляет значение в контейнер. При наличии уже такого значения контейнер не меняется. | ust.emplace_hint(ust.begin(), 7); | O(1) O(N) | 
| empty() | Возвращает пустой ли map. | if(!ust.empty()); | O(1) | 
| end() | Возвращает итератор на место после последнего элемента. | auto i = ust.end(); | O(1) | 
| equal_range (const T& val) | Возвращает пару итераторов окружающих элемент. | auto i = ust.equal_range(3); | O(1) | 
| erase(const T& val) | Удаляет элемент с заданным значением. | ust.erase(3); | O(1) | 
| erase(iterator pos) | Удаляет элемент с заданным итератором. | ust.erase(ust.begin()); | O(1) | 
| erase(iterator it_begin, iterator it_end) | Удаляет элементы в заданном диапазоне итераторов. | ust.erase(++ust.begin(), ust.end()); | O(n) | 
| find() | Возвращает итератор на элемент по ключу или std::end(). | auto i = ust.find(5); | O(1) | 
| insert(const T& val) | Вставляет элемент. Если элемент уже существует, контейнер не меняется | ust.insert(2); | O(1) | 
| insert(initializer_list<value_type<g il) | Вставляет элементы из списка. | ust.insert({2, 4, 6}); | O(n) | 
| key_eq() | Возвращает предикат (функцию) сравнения | bool res = ust.key_eq()(1, 4); | O(1) | 
| load_factor() | Возвращает float load_factor = size / bucket_count | float res = ust.load_factor() | O(1) | 
| max_bucket_count() | Возвращает максимальное количество корзин | size_t sz = max_bucket_count(); //576460752303423487 | O(1) | 
| max_load_factor() | Возвращает максимальный load_factor | float lf = max_load_factor(); //1 | O(1) | 
| max_load_factor(float new_lf) | Устанавливает максимальный load_factor | max_load_factor(0.5f); | O(1) | 
| max_size() | Возвращает максимально возможный размер map. | size_t msize = ust.max_size(); //576460752303423487 | O(1) | 
| rehash(size_type n); | Устанавливает количество корзин в контейнере равное n. | rehash(20); | O(n) | 
| reserve(size_type n) | Устанавливает оптимальное количество корзин в контейнере чтобы вмещать n элементов. | reserve(20); | O(n) | 
| swap(map& ust1) | Обменивает содержимое контейнеров | ust.swap(ust1); | O(1) | 
| unordered_set | Конструктор без аргументов. Создает новый пустой map. | unordered_set<int> ust; | O(1) | 
| unordered_set(initializer_list<value_type> il) | Конструктор из списка инициализации. | unordered_set<int> ust({5, 2, 3, 1}); | O(n) | 
| unordered_set(iterator it_start, iterator it_stop) | Конструктор из диапазона итераторов другого контейнера. | unordered_set mp1(++ust.begin(), ust.end()); | O(n) | 
| unordered_set(const map mp) | Конструктор копирования. Создает со значениями mp | unordered_set mp1(mp); unordered_set<int> mp1(mp); | O(n) | 
#include <iostream>         // cout
#include <unordered_set>    // unordered_set
using namespace std;
int main() {
    unordered_set<int> s_empty; // Создание множества
    unordered_set<string> ss = {"Apple", "Orange", "Nut"};   // Создание множества строк
    unordered_set<int> si{1, 9, 8, 2};   // Создание множества целочисленных значений
    ss.insert("Cherry");    // Добавление элемента
    si.insert(7);           // Добавление элемента
    si.insert(7);           // Добавление существующего элемента (не будет добавлен)
    si.insert({3, 2, 1});   // Добавление нескольких элементо
    ss.erase("Nut");    // Удаление элемента
    si.erase(7);        // Удаление элемента
    si.erase(7);        // Удаление несуществующего элемента
    cout << ss.count("Cherry") << endl; //1 Элемент найден
    cout << ss.count("Chuka") << endl;  //0 Элемент не найден
    cout << si.count(2) << endl;        //1 Элемент найден
    for(auto i : si){ // Перебор элементов
        cout << i << " ";   //3 2 8 9 1      Элементы unordered_set не сортируются
    }
    cout << endl;
    for(auto i : ss){ // Перебор элементов
        cout << i << " ";   //Cherry Orange Apple
    }
}