- 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
}
}