std::unordered_multiset контейнер С++ несортированных неуникальных записей

- 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
    }
}
2023-12-15



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

array - статический массив (после создания размер не изменяется). Быстрее вектора.
Выбор контейнера из стандартной библиотеки С++.
deque - двусторонняя очередь (дек). Эффективное вставка-удаление по концам очереди.
forward_list - односвязный список с эффективной вставкой/удалением в начало списка.
list - двусвязный список с эффективной вставкой/удалением в любом месте списка.
map - словарь сортированных уникальных пар ключ-значение.
multimap - словарь сортированных неуникальных пар ключ-значение.
multiset - множество сортированных неуникальных элементов.
priority_queue - очередь с приоритетом (с сортировкой значений).
queue - очередь FIFO first in, first out "первый пришел - первый ушел".
set - множество сортированных уникальных элементов.
stack - стек LIFO last in, first out "последний пришел - первый ушел".
unordered_map - словарь несортированных уникальных пар ключ-значение.
unordered_multimap - словарь несортированных неуникальных пар ключ-значение.
unordered_multiset - множество несортированных неуникальных значений.
unordered_set - множество несортированных уникальных значений.
vector - вектор (массив) значений с изменяемым размером.