F_JustWei's Studio.

C++ unordered_map

字数统计: 927阅读时长: 3 min
2021/04/22 Share

C++ unordered_map

1、unordered_map简介

unordered_map是C++11正式加入的对hash_map的官方实现。元素在内部不以任何特定顺序排序,而是放进桶中。元素放进哪个桶完全依赖于其键的hash。这允许对单独元素的快速访问,因为一旦计算hash,则它准确指代元素所放进的桶。但unordered_map搜索、插入和元素移除拥有平均常数时间复杂度。

2、头文件

1
#include <unordered_map>

3、成员函数

成员函数 函数功能
insert 在unordered_map中插入元素。
emplace 构造新元素并将其插入unordered_map。
emplace_hint 通过提示构造新元素并将其插入unordered_map。
find 搜索具有给定键的元素。
begin 返回指向unordered_map中第一个元素的迭代器。
end 返回指向末尾的迭代器。
cbegin 返回指向unordered_map中第一个元素的const迭代器。
cend 返回指向末尾的常量迭代器。
clear 删除unordered_map的所有元素。
size 返回unordered_map中的元素数。
max_size 返回unordered_map的最大容量。
count 返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。
empty 如果unordered_map为空,则返回true。
erase 从unordered_map上删除元素。
upper_bound 返回第一个大于值val的位置
lower_bound 返回第一个大于等于值val的位置
swap 交换unordered_map内容。
at 用给定的键检索元素。
bucket_count 返回槽(Bucket)数
max_bucket_count 返回最大槽数
bucket_size 返回槽大小
bucket 返回元素所在槽的序号
load_factor 返回载入因子,即一个元素槽(Bucket)的最大元素数
max_load_factor 返回或设置最大载入因子
rehash 设置槽数
reserve 请求改变容器容量
3.1 插入操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
unordered_map<int, string> m;
// 如果已经存在键值 1,则会作赋值修改操作,如果没有则插入
m[1] = "zhangsan";

// 插入单个键值对,并返回插入位置和成功标志,插入位置已经存在值时,插入失败
pair<iterator,bool> insert (const value_type& val);

//在指定位置插入,在不同位置插入效率是不一样的,因为涉及到重排
iterator insert (const_iterator position, const value_type& val);

// 插入多个
void insert (InputIterator first, InputIterator last);

//c++11开始支持,使用列表插入多个
void insert (initializer_list<value_type> il);
3.2 取值操作

unordered_map中元素取值主要有at和[ ]两种操作。

1
2
3
4
unordered_map<int, string> m;

cout << m[1] << endl;
cout << m.at(1) << endl;
3.3 容量查询
1
2
3
4
5
6
7
8
9
10
11
12
// 查询unordered_map是否为空
bool empty();

// 查询unordered_map中键值对的数量
size_t size();

// 查询unordered_map所能包含的最大键值对数量,和系统和应用库有关。
// 此外,这并不意味着用户一定可以存这么多,很可能还没达到就已经开辟内存失败了
size_t max_size();

// 查询关键字为key的元素的个数,在unordered_map里结果非0即1
size_t count(const Key& key) const; //
3.4 删除操作
1
2
3
4
5
6
7
8
9
10
11
// 删除迭代器指向位置的键值对,并返回一个指向下一元素的迭代器
iterator erase( iterator pos )

// 删除一定范围内的元素,并返回一个指向下一元素的迭代器
iterator erase( const_iterator first, const_iterator last );

// 根据Key来进行删除, 返回删除的元素数量,在unordered_map里结果非0即1
size_t erase( const key_type& key );

// unordered_map,清空后的size为0
void clear();
3.5 查找操作
1
2
3
4
// 关键字查询,找到则返回指向该关键字的迭代器,否则返回指向end的迭代器
// 根据unordered_map的类型,返回的迭代器为 iterator 或者 const_iterator
iterator find (const key_type& k);
const_iterator find (const key_type& k) const;
CATALOG
  1. 1. C++ unordered_map
    1. 1.0.1. 1、unordered_map简介
    2. 1.0.2. 2、头文件
    3. 1.0.3. 3、成员函数
      1. 1.0.3.0.1. 3.1 插入操作
      2. 1.0.3.0.2. 3.2 取值操作
      3. 1.0.3.0.3. 3.3 容量查询
      4. 1.0.3.0.4. 3.4 删除操作
      5. 1.0.3.0.5. 3.5 查找操作