Namespaces
Variants

std::unordered_set<Key,Hash,KeyEqual,Allocator>:: unordered_set

From cppreference.net

(1)
unordered_set ( )
: unordered_set ( size_type ( /* unspecified */ ) ) { }
(начиная с C++11)
(до C++20)
unordered_set ( ) ;
(начиная с C++20)
explicit unordered_set ( size_type bucket_count,

const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(2) (начиная с C++11)
unordered_set ( size_type bucket_count,

const Allocator & alloc )

: unordered_set ( bucket_count, Hash ( ) , key_equal ( ) , alloc ) { }
(3) (с C++14)
unordered_set ( size_type bucket_count,

const Hash & hash,
const Allocator & alloc )

: unordered_set ( bucket_count, hash, key_equal ( ) , alloc ) { }
(4) (начиная с C++14)
explicit unordered_set ( const Allocator & alloc ) ;
(5) (начиная с C++11)
template < class InputIt >

unordered_set ( InputIt first, InputIt last,
size_type bucket_count = /* не указано */ ,
const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(6) (начиная с C++11)
template < class InputIt >

unordered_set ( InputIt first, InputIt last,
size_type bucket_count,
const Allocator & alloc )
: unordered_set ( first, last,

bucket_count, Hash ( ) , key_equal ( ) , alloc ) { }
(7) (начиная с C++14)
template < class InputIt >

unordered_set ( InputIt first, InputIt last,
size_type bucket_count,
const Hash & hash,
const Allocator & alloc )
: unordered_set ( first, last,

bucket_count, hash, key_equal ( ) , alloc ) { }
(8) (начиная с C++14)
unordered_set ( const unordered_set & other ) ;
(9) (начиная с C++11)
unordered_set ( const unordered_set & other, const Allocator & alloc ) ;
(10) (начиная с C++11)
unordered_set ( unordered_set && other ) ;
(11) (начиная с C++11)
unordered_set ( unordered_set && other, const Allocator & alloc ) ;
(12) (начиная с C++11)
unordered_set ( std:: initializer_list < value_type > init,

size_type bucket_count = /* не указано */ ,
const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(13) (начиная с C++11)
unordered_set ( std:: initializer_list < value_type > init,

size_type bucket_count,
const Allocator & alloc )
: unordered_set ( init, bucket_count,

Hash ( ) , key_equal ( ) , alloc ) { }
(14) (начиная с C++14)
unordered_set ( std:: initializer_list < value_type > init,

size_type bucket_count,
const Hash & hash,
const Allocator & alloc )
: unordered_set ( init, bucket_count,

hash, key_equal ( ) , alloc ) { }
(15) (начиная с C++14)
template < container-compatible-range < value_type > R >

unordered_set ( std:: from_range_t , R && rg,
size_type bucket_count = /* см. описание */ ,
const Hash & hash = Hash ( ) ,
const key_equal & equal = key_equal ( ) ,

const Allocator & alloc = Allocator ( ) ) ;
(16) (начиная с C++23)
template < container-compatible-range < value_type > R >

unordered_set ( std:: from_range_t , R && rg,
size_type bucket_count,
const Allocator & alloc )
: unordered_set ( std:: from_range , std:: forward < R > ( rg ) ,

bucket_count, Hash ( ) , key_equal ( ) , alloc ) { }
(17) (начиная с C++23)
template < container-compatible-range < value_type > R >

unordered_set ( std:: from_range_t , R && rg,
size_type bucket_count,
const Hash & hash,
const Alloc & alloc )
: unordered_set ( std:: from_range , std:: forward < R > ( rg ) ,

bucket_count, hash, key_equal ( ) , alloc ) { }
(18) (начиная с C++23)

Создает новый контейнер из различных источников данных. Опционально использует предоставленное пользователем bucket_count в качестве минимального количества создаваемых сегментов, hash в качестве хэш-функции, equal в качестве функции сравнения ключей и alloc в качестве аллокатора.

1-5) Создает пустой контейнер. Устанавливает max_load_factor() в значение 1.0 . Для конструктора по умолчанию количество корзин не определено.
6-8) Конструирует контейнер с содержимым диапазона [ first , last ) . Устанавливает max_load_factor() в значение 1.0 . Если несколько элементов в диапазоне имеют эквивалентные ключи, не определено, какой элемент будет вставлен (в ожидании LWG2844 ).
9,10) Конструктор копирования. Создает контейнер с копией содержимого other , также копирует коэффициент загрузки, предикат и хэш-функцию. Если alloc не предоставлен, аллокатор получается путем вызова std:: allocator_traits < allocator_type > :: select_on_container_copy_construction ( other. get_allocator ( ) ) .

Параметр шаблона Allocator выводится только из первого аргумента при использовании вывода аргументов шаблона класса .

(since C++23)
11,12) Конструктор перемещения . Создает контейнер с содержимым other используя семантику перемещения. Если alloc не предоставлен, аллокатор получается путем перемещения из аллокатора, принадлежащего other .

Параметр шаблона Allocator выводится только из первого аргумента при использовании вывода аргументов шаблона класса .

(начиная с C++23)
13-15) Конструктор со списком инициализации . Создает контейнер с содержимым списка инициализации init , аналогично unordered_set ( init. begin ( ) , init. end ( ) ) .
16-18) Конструирует контейнер с содержимым из rg . Если несколько элементов в диапазоне имеют эквивалентные ключи, не определено, какой элемент будет вставлен (в ожидании LWG2844 ).

Содержание

Параметры

alloc - аллокатор для использования во всех выделениях памяти этого контейнера
bucket_count - минимальное количество корзин для использования при инициализации. Если не указано, используется неопределенное значение по умолчанию
hash - хеш-функция для использования
equal - функция сравнения для использования во всех сравнениях ключей этого контейнера
first, last - пара итераторов, определяющая исходный диапазон элементов для копирования
rg - совместимый с контейнером диапазон , то есть input_range , элементы которого конвертируются в value_type
other - другой контейнер, используемый в качестве источника для инициализации элементов контейнера
init - список инициализации для инициализации элементов контейнера
Требования к типам
-
InputIt должен удовлетворять требованиям LegacyInputIterator .

Сложность

1-5) Константа.
6-8) В среднем линейная сложность (т.е. O(N) , где N равно std:: distance ( first, last ) ), в худшем случае квадратичная сложность, т.е. O(N 2 ) .
9,10) Линейно по размеру other .
11,12) Константная. Если alloc задан и alloc ! = other. get_allocator ( ) , то линейная.
13-15) Средний случай O(N) ( N это std:: size ( init ) ), худший случай O(N 2 ) .
16-18) Средний случай O(N) ( N это ranges:: distance ( rg ) ), худший случай O(N 2 ) .

Исключения

Вызовы Allocator::allocate могут генерировать исключения.

Примечания

After container move construction (overload ( 11,12 ) ), references, pointers, and iterators (other than the end iterator) to other remain valid, but refer to elements that are now in * this . The current standard makes this guarantee via the blanket statement in [container.reqmts]/67 , and a more direct guarantee is under consideration via Проблема LWG 2321 .

Хотя формально это не требовалось до C++23, некоторые реализации уже помещали параметр шаблона Allocator в невыводимые контексты в более ранних режимах.

Feature-test макрос Значение Стандарт Функциональность
__cpp_lib_containers_ranges 202202L (C++23) Ranges-aware конструирование и вставка; перегрузки ( 16-18 )

Пример

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение в опубликованной версии Корректное поведение
LWG 2193 C++11 конструктор по умолчанию ( 1 ) был explicit сделан не-explicit
LWG 2230 C++11 семантика перегрузки ( 13 ) не была определена определена

Смотрите также

присваивает значения контейнеру
(public member function)