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