Namespaces
Variants

std::unordered_multimap<Key,T,Hash,KeyEqual,Allocator>:: unordered_multimap

From cppreference.net

</tr
(1)
unordered_multimap ( )
: unordered_multimap ( size_type ( /* 未指定 */ ) ) { }
(自 C++11 起)
(直至 C++20)
unordered_multimap ( ) ;
(自 C++20 起)
explicit unordered_multimap ( size_type bucket_count,

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

const Allocator & alloc = Allocator ( ) ) ;
(2) (自 C++11 起)
unordered_multimap ( size_type bucket_count,

const Allocator & alloc )

: unordered_multimap ( bucket_count, Hash ( ) , key_equal ( ) , alloc ) { }
(3) (自 C++14 起)
unordered_multimap ( size_type bucket_count,

const Hash & hash,
const Allocator & alloc )

: unordered_multimap ( bucket_count, hash, key_equal ( ) , alloc ) { }
(4) (自 C++14 起)
explicit unordered_multimap ( const Allocator & alloc ) ;
(5) (自 C++11 起)
template < class InputIt >

unordered_multimap ( 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_multimap ( InputIt first, InputIt last,
size_type bucket_count,
const Allocator & alloc )
: unordered_multimap ( first, last,

bucket_count, Hash ( ) , key_equal ( ) , alloc ) { }
(7) (自 C++14 起)
template < class InputIt >

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

bucket_count, hash, key_equal ( ) , alloc ) { }
(8) (自 C++14 起)
unordered_multimap ( const unordered_multimap & other ) ;
(9) (自 C++11 起)
unordered_multimap ( const unordered_multimap & other, const Allocator & alloc ) ;
(10) (自 C++11 起)
unordered_multimap ( unordered_multimap && other ) ;
(11) (自 C++11 起)
unordered_multimap ( unordered_multimap && other, const Allocator & alloc ) ;
(12) (自 C++11 起)
unordered_multimap ( 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_multimap ( std:: initializer_list < value_type > init,

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

Hash ( ) , key_equal ( ) , alloc ) { }
(14) (自 C++14 起)
unordered_multimap ( std:: initializer_list < value_type > init,

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

hash, key_equal ( ) , alloc ) { }
(15) (自 C++14 起)

从多种数据源构造新容器。可选择使用用户提供的 bucket_count 作为创建的最小桶数, hash 作为哈希函数, equal 作为键比较函数, alloc 作为分配器。

1-5) 构造空容器。设置 max_load_factor() 1.0 。对于默认构造函数,桶的数量是未指定的。
6-8) 使用范围 [ first , last ) 的内容构造容器。将 max_load_factor() 设置为 1.0
9,10) 拷贝构造函数。以 other 内容的副本构造容器,同时拷贝负载因子、谓词和哈希函数。若未提供 alloc ,则通过调用 std:: allocator_traits < allocator_type > :: select_on_container_copy_construction ( other. get_allocator ( ) ) 获取分配器。

模板参数 Allocator 在使用 类模板实参推导 时仅从首个实参推导。

(C++23 起)
11,12) 移动构造函数 。通过移动语义构造容器,内容来自 other 。如果未提供 alloc ,则通过从属于 other 的分配器进行移动构造来获取分配器。

模板参数 Allocator 在用于 类模板实参推导 时仅从第一个实参推导。

(since C++23)
13-15) 初始化列表构造函数 。使用初始化列表 init 的内容构造容器,等同于 unordered_multimap ( init. begin ( ) , init. end ( ) )
16-18) 使用 rg 的内容构造容器。

目录

参数

alloc - 用于此容器所有内存分配的分配器
bucket_count - 初始化时使用的最小桶数。若未指定,则使用未指定的默认值
hash - 要使用的哈希函数
equal - 用于此容器所有键比较的比较函数
first, last - 定义要复制元素源 范围 的迭代器对
rg - 容器兼容范围 ,即元素可转换为 value_type input_range
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 置于 非推导上下文 中。

功能测试 标准 功能特性
__cpp_lib_containers_ranges 202202L (C++23) 支持范围 的构造与插入;重载版本 ( 16-18 )

示例

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 2193 C++11 默认构造函数 ( 1 ) 为显式 改为非显式
LWG 2230 C++11 重载版本 ( 13 ) 的语义未作规定 已作规定

另请参阅

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