Namespaces
Variants

std::flat_multiset<Key,Compare,KeyContainer>:: flat_multiset

From cppreference.net

flat_multiset ( )
: flat_multiset ( key_compare ( ) ) { }
(1) (自 C++23 起)
template < class Allocator >
flat_multiset ( const flat_multiset & other, const Allocator & alloc ) ;
(2) (自 C++23 起)
template < class Allocator >
flat_multiset ( flat_multiset && other, const Allocator & alloc ) ;
(3) (自 C++23 起)
explicit flat_multiset ( container_type cont,
const key_compare & comp = key_compare ( ) ) ;
(4) (自 C++23 起)
template < class Allocator >
flat_multiset ( const container_type & cont, const Allocator & alloc ) ;
(5) (自 C++23 起)
template < class Allocator >

flat_multiset ( const container_type & cont, const key_compare & comp,

const Allocator & alloc ) ;
(6) (自 C++23 起)
flat_multiset ( std:: sorted_equivalent_t s, container_type cont,

const key_compare & comp = key_compare ( ) )

: c ( std :: move ( cont ) ) , compare ( comp ) { }
(7) (自 C++23 起)
template < class Allocator >

flat_multiset ( std:: sorted_equivalent_t s, const container_type & cont,

const Allocator & alloc ) ;
(8) (自 C++23 起)
template < class Allocator >

flat_multiset ( std:: sorted_equivalent_t s, const container_type & cont,

const key_compare & comp, const Allocator & alloc ) ;
(9) (自 C++23 起)
explicit flat_multiset ( const key_compare & comp )
: c ( ) , compare ( comp ) { }
(10) (自 C++23 起)
template < class Allocator >
flat_multiset ( const key_compare & comp, const Allocator & alloc ) ;
(11) (自 C++23 起)
template < class Allocator >
explicit flat_multiset ( const Allocator & alloc ) ;
(12) (自 C++23 起)
template < class InputIter >

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

: c ( ) , compare ( comp ) ;
(13) (自 C++23 起)
template < class InputIter, class Allocator >

flat_multiset ( InputIter first, InputIter last,

const key_compare & comp, const Allocator & alloc ) ;
(14) (自 C++23 起)
template < class InputIter, class Allocator >
flat_multiset ( InputIter first, InputIter last, const Allocator & alloc ) ;
(15) (自 C++23 起)
template < container-compatible-range < value_type > R >

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

: flat_multiset ( comp ) ;
(16) (自 C++23 起)
template < container-compatible-range < value_type > R >

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

: flat_multiset ( fr, std:: forward < R > ( rg ) , key_compare ( ) ) <

从多种数据源构造新的容器适配器,并可选择性地提供比较函数对象 comp 和/或分配器 alloc

1) 默认构造函数。构造一个空的容器适配器。
2) 拷贝构造函数 。使用 other. c 内容的副本构造 c ,并使用 other. compare 构造 compare 。 请参阅下方的 分配器使用说明
3) 一个 移动构造函数 。使用移动语义构造容器适配器,其内容来自 other 。 请参阅下方的 分配器使用说明
4) 使用容器 cont 的内容构造底层容器。首先,使用 std :: move ( cont ) 初始化 c ,并使用 comp 初始化 compare 。然后根据 comp c 进行排序。
5) (4) 相同,等价于 flat_multiset ( cont ) ; 。 参见下方 分配器使用说明
6) (4) 相同,等价于 flat_multiset ( cont, comp ) ; 。 请参阅下方的 分配器使用说明
7) 使用其他容器 cont 的内容构造底层容器。使用 std :: move ( cont ) 初始化 c ,并使用 comp 初始化 compare
8) (7) 相同,等价于 flat_multiset ( s, cont ) ; 。 请参阅下方的 分配器使用说明
9) (7) 相同,等价于 flat_multiset ( s, 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) 相同,但将其用作 委托构造函数
18,19) (16) 。 参见下方 分配器使用说明
20) 使用范围 [ first , last ) 的内容构造底层容器。使用 c ( first, last ) 初始化 c ,并使用 compare ( comp ) 初始化 compare
21,22) (20) 相同。 请参阅下方的 分配器使用说明
23) 一个 初始化列表构造函数 。使用初始化列表 init 的内容构造底层容器,通过 (13) 作为 委托构造函数
24,25) (23) 相同。 参见下方的 分配器使用说明
26) 一个 初始化列表构造函数 。使用初始化列表 init 的内容构造底层容器,通过 (20) 作为 委托构造函数
27,28) 保存为 (26) 。 参见下方的 分配器使用说明

注意对于重载 (13-15,20-22) :如果 [ first , last ) 不是有效的 范围 ,则行为未定义。

目录

分配器使用说明

构造函数 (2,3,5,6,8,9,11,12,14,15,17,19,21,22,24,25,27,28) 与对应的非分配器构造函数等效,区别在于 c 是通过 使用分配器构造 方式构建的。 这些重载仅当 std:: uses_allocator_v < container_type, Allocator > true 时参与重载决议。

参数

cont - 用作初始化底层容器的源容器
other - 用作初始化底层容器元素的源 flat_multiset
alloc - 用于底层容器所有内存分配的分配器
comp - 用于所有键比较的函数对象
first, last - 定义待复制元素源 范围 的迭代器对
init - 用于初始化底层容器元素的初始化列表
rg - 用作初始化底层容器源的 容器兼容范围 (即元素可转换为 value_type input_range
fr - 指示应对包含成员进行范围构造的 消歧义标签
s - 指示输入序列已按 compare 排序的 消歧义标签
类型要求
-
InputIt 必须满足 LegacyInputIterator 要求。
-
Compare 必须满足 Compare 要求。
-
Allocator 必须满足 Allocator 要求。

复杂度

1) 常量。
2) other 的大小成线性关系。
3) 与所包装容器的对应移动构造函数相同,即时间复杂度为常数阶或与 cont 的规模呈线性关系。
4-6) cont 已按 compare 排序,则时间复杂度为与 N 呈线性关系;否则为 𝓞(N·log(N)) ,其中 N 表示本次调用前 cont. size ( ) 的值。
7-9) 与所包装容器的对应移动构造函数相同,即时间复杂度为常数或与 cont 的大小成线性关系。
10-12) 常量。
13-15) 若输入范围 [ first , last ) 相对于 compare 已排序,则时间复杂度为 N 的线性复杂度;否则为 𝓞(N·log(N)) ,其中 N 表示本次调用前 cont. size ( ) 的值。
16-19) 若输入范围 rg 相对于 compare 已排序,则时间复杂度为 N 的线性阶;否则为 𝓞(N·log(N)) ,其中 N 表示本次调用前 cont. size ( ) 的值。
20-22) [ first , last ) 的大小成线性关系。
23-25) init 的元素已按 compare 排序,则时间复杂度为 N 的线性阶;否则为 𝓞(N·log(N)) ,其中 N 表示本次调用前 cont. size ( ) 的值。
26-28) init 的大小成线性关系。

异常

Allocator::allocate 的调用可能抛出异常。

注释

在容器移动构造(重载 ( 3 ) )之后,指向 other 的引用、指针和迭代器(除尾后迭代器外)仍然有效,但会引用现在位于 * this 中的元素。当前标准通过 [container.reqmts]/67 中的总体说明提供此保证,并且正在通过 LWG issue 2321 考虑提供更直接的保证。

示例

参见

为容器适配器赋值
(公开成员函数)