Namespaces
Variants

std::flat_map<Key,T,Compare,KeyContainer,MappedContainer>:: flat_map

From cppreference.net

flat_map ( )
: flat_map ( key_compare ( ) ) { }
(1) (начиная с C++23)
template < class Allocator >
flat_map ( const flat_map & , const Allocator & alloc ) ;
(2) (начиная с C++23)
template < class Allocator >
flat_map ( flat_map && , const Allocator & alloc ) ;
(3) (начиная с C++23)
flat_map ( key_container_type key_cont, mapped_container_type mapped_cont,
const key_compare & comp = key_compare ( ) ) ;
(4) (начиная с C++23)
template < class Allocator >

flat_map ( const key_container_type & key_cont,
const mapped_container_type & mapped_cont,

const Allocator & alloc ) ;
(5) (начиная с C++23)
template < class Allocator >

flat_map ( const key_container_type & key_cont,
const mapped_container_type & mapped_cont,

const key_compare & comp, const Allocator & alloc ) ;
(6) (начиная с C++23)
flat_map ( std:: sorted_unique_t , key_container_type key_cont,

mapped_container_type mapped_cont,

const key_compare & comp = key_compare ( ) ) ;
(7) (начиная с C++23)
template < class Allocator >

flat_map ( std:: sorted_unique_t , const key_container_type & key_cont,

const mapped_container_type & mapped_cont, const Allocator & alloc ) ;
(8) (начиная с C++23)
template < class Allocator >

flat_map ( std:: sorted_unique_t , const key_container_type & key_cont,
const mapped_container_type & mapped_cont,

const key_compare & comp, const Allocator & alloc ) ;
(9) (начиная с C++23)
explicit flat_map ( const key_compare & comp )
: c ( ) , compare ( comp ) { }
(10) (начиная с C++23)
template < class Allocator >
flat_map ( const key_compare & comp, const Allocator & alloc ) ;
(11) (начиная с C++23)
template < class Allocator >
explicit flat_map ( const Allocator & alloc ) ;
(12) (начиная с C++23)
template < class InputIter >

flat_map ( InputIter first, InputIter last,
const key_compare & comp = key_compare ( ) )

: c ( ) , compare ( comp ) ;
(13) (начиная с C++23)
template < class InputIter, class Allocator >

flat_map ( InputIter first, InputIter last,

const key_compare & comp, const Allocator & alloc ) ;
(14) (начиная с C++23)
template < class InputIter, class Allocator >
flat_map ( InputIter first, InputIter last, const Allocator & alloc ) ;
(15) (начиная с C++23)
template < container-compatible-range < value_type > R >

flat_map ( std:: from_range_t , R && rg, const key_compare & comp )

: flat_map ( comp ) ;
(16) (начиная с C++23)
template < container-compatible-range < value_type > R >

flat_map ( std:: from_range_t fr, R && rg )

: flat_map ( fr, std:: forward < R > ( rg ) , key_compare ( ) ) { }
(17) (начиная с C++23)
template < container-compatible-range < value_type > R, class Allocator >
flat_map ( std:: from_range_t , R && rg, const Allocator & alloc ) ;
(18) (начиная с C++23)
template < container-compatible-range < value_type > R, class Allocator >

flat_map ( std:: from_range_t , R && rg, const key_compare & comp,

const Allocator & alloc ) ;
(19) (начиная с C++23)
template < class InputIter >

flat_map ( std:: sorted_unique_t s, InputIter first, InputIter last,
const key_compare & comp = key_compare ( ) )

: c ( ) , compare ( comp ) ;
(20) (начиная с C++23)
template < class InputIter, class Allocator >

flat_map ( std:: sorted_unique_t s, InputIter first, InputIter last,

const key_compare & comp, const Allocator & alloc ) ;
(21) (начиная с C++23)
template < class InputIter, class Allocator >

flat_map ( std:: sorted_unique_t s, InputIter first, InputIter last,

const Allocator & alloc ) ;
(22) (начиная с C++23)
flat_map ( std:: initializer_list < value_type > init,

const key_compare & comp = key_compare ( ) )

: flat_map ( init. begin ( ) , init. end ( ) , comp ) { }
(23) (начиная с C++23)
template < class Allocator >

flat_map ( std:: initializer_list < value_type > init, const key_compare & comp,

const Allocator & alloc ) ;
(24) (начиная с C++23)
template < class Allocator >
flat_map ( std:: initializer_list < value_type > init, const Allocator & alloc ) ;
(25) (начиная с C++23)
flat_map ( std:: sorted_unique_t s, std:: initializer_list < value_type > init,

const key_compare & comp = key_compare ( ) )

: flat_map ( s, init. begin ( ) , init. end ( ) , comp ) { }
(26) (начиная с C++23)
template < class Allocator >

flat_map ( std:: sorted_unique_t s, std:: initializer_list < value_type > init,

const key_compare & comp, const Allocator & alloc ) ;
(27) (начиная с C++23)
template < class Allocator >

flat_map ( std:: sorted_unique_t s, std:: initializer_list < value_type > init,

const Allocator & alloc ) ;
(28) (начиная с C++23)

Создает новый адаптер контейнера из различных источников данных и, опционально, используя предоставленный пользователем функциональный объект сравнения comp и/или аллокатор alloc .

1) Конструктор по умолчанию. Создает пустой адаптер контейнера.
2) A copy constructor . Создает c с копией содержимого other. c и compare с other. compare . Смотрите примечание об использовании аллокатора ниже.
3) Конструктор перемещения. Создает адаптер контейнера с содержимым other с использованием семантики перемещения. Смотрите примечание об использовании аллокатора ниже.
4) Сначала инициализирует c.keys с помощью std :: move ( key_cont ) , c.values с помощью std :: move ( mapped_cont ) , и compare с помощью comp . Затем сортирует базовый диапазон [ begin ( ) , end ( ) ) относительно value_comp() . Наконец, удаляет дублирующиеся элементы, как если бы:
auto zv = views:: zip ( c. keys , c. values ) ;
auto it = ranges:: unique ( zv, key_equiv ( compare ) ) . begin ( ) ;
auto dist = distance ( zv. begin ( ) , it ) ;
c. keys . erase ( c. keys . begin ( ) + dist, c. keys . end ( ) ) ;
c. values . erase ( c. values . begin ( ) + dist, c. values . end ( ) ) ;
.
5) То же, что и (4) , эквивалентно flat_map ( key_cont, mapped_cont ) ; . Смотрите примечание об использовании аллокатора ниже.
6) То же, что и (4) , эквивалентно flat_map ( key_cont, mapped_cont, comp ) ; . См. примечание об использовании аллокатора ниже.
7) Инициализирует c.keys с помощью std :: move ( key_cont ) , c.values с помощью std :: move ( mapped_cont ) , и compare с помощью comp .
8) То же, что и (7) , эквивалентно flat_map ( s, key_cont, mapped_cont ) ; . Смотрите примечание об использовании аллокатора ниже.
9) То же, что и (7) , эквивалентно flat_map ( s, key_cont, mapped_cont, comp ) ; . Смотрите примечание об использовании аллокатора ниже.
10) Создает пустой адаптер контейнера.
11,12) Создает пустой адаптер контейнера. Смотрите примечание об использовании аллокатора ниже.
13) Конструирует адаптер контейнера с содержимым диапазона [ first , last ) , эквивалентно insert ( first, last ) ; .
14,15) То же, что и (13) . Смотрите примечание об использовании аллокатора ниже.
16) Конструирует адаптер контейнера с содержимым диапазона rg . Сначала использует (10) как делегирующий конструктор . Затем инициализирует c содержимым rg как если бы с помощью insert_range ( std:: forward < R > ( rg ) ) ; .
17) То же, что и (16) , но используется как delegating constructor .
18,19) То же, что и (16) . См. примечание об использовании аллокатора ниже.
20) Создает базовые контейнеры с содержимым диапазона [ first , last ) как если бы с помощью insert ( first, last ) .
21,22) То же, что и (20) . Смотрите примечание об использовании аллокатора ниже.
23) Конструктор со списком инициализации . Создает базовый контейнер с содержимым списка инициализации init , используя (13) в качестве делегирующего конструктора .
24,25) То же, что и (23) . Смотрите примечание об использовании аллокатора ниже.
26) Конструктор со списком инициализации . Создает базовый контейнер с содержимым списка инициализации init , используя (20) в качестве делегирующего конструктора .
27,28) Сохранить как (26) . См. примечание об использовании аллокатора ниже.

Примечание для перегрузок (13-15,20-22) : Если [ first , last ) не является допустимым диапазоном , поведение не определено.

Note for overloads (4-6,13-19,23-25) : If multiple elements in the range have keys that compare equivalent, it is unspecified which element is inserted (pending LWG2844 ).

Содержание

Примечание по использованию аллокатора

Конструкторы (2,3,5,6,8,9,11,12,14,15,17,19,21,22,24,25,27,28) эквивалентны соответствующим конструкторам без аллокатора, за исключением того, что базовые контейнеры c.keys и c.values создаются с помощью uses-allocator construction . Эти перегрузки участвуют в разрешении перегрузки только если std:: uses_allocator_v < container_type, Allocator > равно true .

Параметры

key_cont - контейнер, используемый в качестве источника для инициализации базового контейнера ключей
mapped_cont - контейнер, используемый в качестве источника для инициализации базового контейнера значений
other - другой flat_map , используемый в качестве источника для инициализации элементов базовых контейнеров
alloc - аллокатор, используемый для всех выделений памяти базовых контейнеров
comp - функциональный объект, используемый для всех сравнений ключей
first, last - пара итераторов, определяющая исходный диапазон элементов для копирования
init - список инициализации для инициализации элементов базовых контейнеров
rg - совместимый с контейнером диапазон (то есть input_range , элементы которого конвертируются в value_type ), используемый в качестве источника для инициализации базовых контейнеров
fr - тег устранения неоднозначности , указывающий, что содержащийся член должен быть сконструирован из диапазона
s - тег устранения неоднозначности , указывающий, что входная последовательность отсортирована относительно value_comp() и все её элементы уникальны
Требования к типам
-
InputIt должен удовлетворять требованиям LegacyInputIterator .
-
Compare должен удовлетворять требованиям Compare .
-
Allocator должен удовлетворять требованиям Allocator .

Сложность

1) Константа.
2) Линейно по размеру other .
3) То же, что и соответствующий move-конструктор обернутого контейнера, т.е. константная или линейная по размеру cont .
4-6) Линейная от N если cont отсортирован относительно value_comp() , иначе 𝓞(N·log(N)) , где N равно значению key_cont. size ( ) до этого вызова.
7-9) То же, что и соответствующий move-конструктор обёрнутого контейнера, т.е. константная или линейная по размеру cont .
10-12) Константа.
13-15) Линейная от N если входной диапазон [ first , last ) отсортирован относительно value_comp() , иначе 𝓞(N·log(N)) , где N равно значению key_cont. size ( ) до этого вызова.
16-19) Линейная от N если входной диапазон rg отсортирован относительно value_comp() , иначе 𝓞(N·log(N)) , где N является значением key_cont. size ( ) до этого вызова.
20-22) Линейно по размеру [ first , last ) .
23-25) Линейная по N если элементы init отсортированы относительно value_comp() , иначе 𝓞(N·log(N)) , где N равно значению key_cont. size ( ) до этого вызова.
26-28) Линейно по размеру init .

Исключения

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

Примечания

После перемещающего конструирования контейнера (перегрузка ( 3 ) ), ссылки, указатели и итераторы (кроме конечного итератора) на other остаются действительными, но ссылаются на элементы, которые теперь находятся в * this . Текущий стандарт обеспечивает эту гарантию с помощью общего положения в [container.reqmts]/67 , и более прямая гарантия рассматривается через LWG issue 2321 .

Пример

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

присваивает значения адаптеру контейнера
(публичная функция-член)