c++11 标准模板(STL)(std::unordered_map)(一)

定义于头文件 <unordered_map>
template<

    class Key,
    class T,
    class Hash = std::hash<Key>,
    class KeyEqual = std::equal_to<Key>,
    class Allocator = std::allocator< std::pair<const Key, T> >

> class unordered_map;
(1)(C++11 起)
namespace pmr {

    template <class Key,
              class T,
              class Hash = std::hash<Key>,
              class KeyEqual = std::equal_to<Key>>
              using unordered_map = std::unordered_map<Key, T, Hash, Pred,
                              std::pmr::polymorphic_allocator<std::pair<const Key,T>>>;

}
(2)(C++17 起)

 

unordered_map 是关联容器,含有带唯一键的键-值 pair 。搜索、插入和元素移除拥有平均常数时间复杂度。

元素在内部不以任何特定顺序排序,而是组织进桶中。元素放进哪个桶完全依赖于其键的哈希。这允许对单独元素的快速访问,因为一旦计算哈希,则它准确指代元素所放进的桶。

std::unordered_map 满足容器 (Container) 、具分配器容器 (AllocatorAwareContainer) 、无序关联容器 (UnorderedAssociativeContainer) 的要求。

迭代器非法化

操作非法化
所有只读操作、 swap 、 std::swap决不
clear 、 rehash 、 reserve 、 operator=始终
insert 、 emplace 、 emplace_hint 、 operator[]仅若重哈希导致
erase仅为指向被擦除元素者

注意

  • swap 函数不非法化容器内的任何迭代器,但它们非法化标记交换区域结尾的迭代器。
  • 指向存储于容器中的关键或元素的引用和指针仅因擦除该元素才被非法化,即使在非法化对应迭代器时。

成员类型

成员类型定义
key_typeKey
mapped_typeT
value_typestd::pair<const Key, T>
size_type无符号整数类型(通常是 std::size_t )
difference_type有符号整数类型(通常是 std::ptrdiff_t )
hasherHash
key_equal

KeyEqual

(C++20 前)

Hash::transparent_key_equal ,若定义且它指名类型,否则为 KeyEqual

(C++20 起)
allocator_typeAllocator
referencevalue_type&
const_referenceconst value_type&
pointerstd::allocator_traits<Allocator>::pointer
const_pointerstd::allocator_traits<Allocator>::const_pointer
iterator遗留向前迭代器 (LegacyForwardIterator)
const_iterator常向前迭代器
local_iterator类别、值、差、指针和引用类型都与 iterator 相同的迭代器类型。
能用此迭代器在单个桶迭代,但不能跨桶。
const_local_iterator类别、值、差、指针和引用类型都与 const_iterator 相同的迭代器类型。
能用此迭代器在单个桶迭代,但不能跨桶。
node_type(C++17 起)表示容器结点的结点把柄特化
insert_return_type(C++17 起)描述插入 node_type 结果的类型,下列类型的特化
template <class Iter, class NodeType> struct /*unspecified*/ {
    Iter     position;
    bool     inserted;
    NodeType node;
};
,以模板实参 iteratornode_type 实例化。

 

成员函数

(构造函数)

构造 unordered_map
(公开成员函数)

(析构函数)

析构 unordered_map
(公开成员函数)

operator=

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

get_allocator

返回相关的分配器
(公开成员函数)

 

迭代器

begin cbegin

返回指向容器第一个元素的迭代器
(公开成员函数)

end cend

返回指向容器尾端的迭代器
(公开成员函数)

容量

empty

检查容器是否为空
(公开成员函数)

size

返回容纳的元素数
(公开成员函数)

max_size

返回可容纳的最大元素数
(公开成员函数)

修改器

clear

清除内容
(公开成员函数)

insert

插入元素或结点 (C++17 起)
(公开成员函数)

insert_or_assign

(C++17)

插入元素,或若关键已存在则赋值给当前元素
(公开成员函数)

emplace

原位构造元素
(公开成员函数)

emplace_hint

使用提示原位构造元素
(公开成员函数)

try_emplace

(C++17)

若键不存在则原位插入,若键存在则不做任何事
(公开成员函数)

erase

擦除元素
(公开成员函数)

swap

交换内容
(公开成员函数)

extract

(C++17)

从另一容器释出结点
(公开成员函数)

merge

(C++17)

从另一容器接合结点
(公开成员函数)

查找

at

访问指定的元素,同时进行越界检查
(公开成员函数)

operator[]

访问或插入指定的元素
(公开成员函数)

count

返回匹配特定键的元素数量
(公开成员函数)

find

寻找带有特定键的元素
(公开成员函数)

contains

(C++20)

检查容器是否含有带特定关键的元素
(公开成员函数)

equal_range

返回匹配特定键的元素范围
(公开成员函数)

桶接口

begin(size_type) cbegin(size_type)

返回一个迭代器,指向指定的桶的开始
(公开成员函数)

end(size_type) cend(size_type)

返回一个迭代器,指向指定的桶的末尾
(公开成员函数)

bucket_count

返回桶数
(公开成员函数)

max_bucket_count

返回桶的最大数量
(公开成员函数)

bucket_size

返回在特定的桶中的元素数量
(公开成员函数)

bucket

返回带有特定键的桶
(公开成员函数)

哈希策略

load_factor

返回每个桶的平均元素数量
(公开成员函数)

max_load_factor

管理每个桶的平均元素数量的最大值
(公开成员函数)

rehash

为至少为指定数量的桶预留存储空间。
这会重新生成哈希表。
(公开成员函数)

reserve

为至少为指定数量的元素预留存储空间。
这会重新生成哈希表。
(公开成员函数)

观察器

hash_function

返回用于对关键哈希的函数
(公开成员函数)

key_eq

返回用于比较键的相等性的函数
(公开成员函数)

非成员函数

operator==operator!=

比较 unordered_map 中的值
(函数模板)

std::swap(std::unordered_map)

(C++11)

特化 std::swap 算法
(函数模板)

erase_if(std::unordered_map)

(C++20)

擦除所有满足特定判别标准的元素
(函数模板)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值