【C++】【数据结构】【API列表】标准库数据结构
标准库数据结构
unordered_set
头文件:#include <unordered_set>
特性:
- 唯一性:所有元素唯一,重复插入无效
- 无序性:元素存储顺序不固定
- 自定义类型:若存储自定义类型需提供哈希函数和相等比较器
成员函数:
-
基本操作函数
-
构造函数
-
unordered_set<T>()
:创建空容器 -
unordered_set<T>(initializer_list)
:通过初始化列表构造(如{1, 2, 3}
) -
unordered_set<T>(size_type n)
:指定初始桶数量构造
-
-
插入元素
-
insert(const T& value)
:插入单个元素(若已存在则不插入) -
insert(initializer_list)
:插入多个元素 -
emplace(args...)
:原地构造元素插入,效率高于insert
-
-
-
查找与统计
-
查找元素
-
find(const T& key)
:返回指向元素的迭代器,若未找到则返回end()
-
count(const T& key)
:返回元素存在次数(0或1)
-
-
范围查找
-
equal_range(key)
:返回包含匹配元素的迭代器范围(pair<iterator, iterator>
)
-
-
-
删除元素
-
erase(const T& key)
:删除指定元素 -
erase(iterator pos)
:通过迭代器删除指定位置元素 -
clear()
:清空所有元素
-
-
容量与状态
-
size()
:返回当前元素数量 -
empty()
:判断容器是否为空 -
max_size()
:返回容器最大可能容纳元素数量 -
load_factor()
:返回当前负载因子(元素数/桶数) -
max_load_factor()
:获取或设置最大负载因子阈值
-
-
哈希与桶管理
-
哈希函数
-
hash_function()
:返回容器使用的哈希函数对象
-
-
桶操作
-
bucket_count()
:返回当前桶的总数 -
bucket(key)
:返回元素所在的桶编号 -
bucket_size(n)
:返回第n
个桶中的元素数量 -
rehash(n)
:调整桶数量为n
并重新分布元素 -
reserve(n)
:预分配至少容纳n
个元素的桶
-
-
-
迭代器相关
-
begin()
/end()
:正向迭代器,用于遍历元素 -
cbegin()
/cend()
:常量正向迭代器
-
unordered_map<K, V>
头文件:#include <unordered_map>
特性:
- 键唯一性:每个键唯一,重复插入会覆盖旧值
- 无序性:元素存储顺序由哈希函数决定,不可预测
- 自定义键类型:需提供哈希函数(通过特化
std::hash
)和相等比较器(operator==
) - 性能优化:预分配桶(
reserve()
)或调整负载因子可减少哈希冲突
成员函数:
-
基本操作函数
-
构造函数
-
unordered_map<Key, T>()
:创建空容器 -
unordered_map<Key, T>(initializer_list)
:通过初始化列表构造键值对(如{{"apple", 1}, {"banana", 2}}
) -
unordered_map<Key, T>(size_type n)
:指定初始桶数量构造
-
-
插入元素
-
insert(const pair<Key, T>& kv)
:插入单个键值对(若键存在则不插入) -
emplace(Key k, T v)
:原地构造键值对插入,避免拷贝开销,效率更高 -
operator[]
:通过键直接插入或修改值(若键不存在则创建默认值) -
insert_or_assign(Key k, T v)
:若键存在则覆盖旧值,否则插入新键值对(C++17引入)
-
-
-
查找与访问
-
键值访问
-
at(Key k)
:返回键对应的值,若键不存在抛出std::out_of_range
异常 -
operator[]
:通过键访问值,若键不存在则插入默认值
-
-
查找操作
-
find(Key k)
:返回指向键值对的迭代器,未找到则返回end()
-
count(Key k)
:返回键存在的次数(0或1) -
contains(Key k)
:C++20引入,直接返回布尔值表示键是否存在
-
-
-
删除与清空
-
erase(Key k)
:删除指定键的键值对,返回删除数量(0或1) -
erase(iterator pos)
:通过迭代器删除指定位置的键值对 -
clear()
:清空所有元素
-
-
容量与状态
-
size()
:返回当前元素数量 -
empty()
:判断容器是否为空 -
max_size()
:返回容器可容纳的最大元素数量(受系统限制) -
load_factor()
:返回当前负载因子(元素数/桶数) -
max_load_factor()
:获取或设置最大负载因子阈值(触发扩容的阈值)
-
-
哈希与桶管理
-
哈希函数与桶操作
-
hash_function()
:返回容器使用的哈希函数对象 -
bucket_count()
:返回当前桶的总数 -
bucket(Key k)
:返回键所在桶的编号 -
bucket_size(n)
:返回第n
个桶中的元素数量 -
rehash(n)
:调整桶数量为n
并重新分布元素 -
reserve(n)
:预分配至少容纳n
个元素的桶,避免多次扩容
-
-
-
迭代器相关
-
begin()
/end()
:正向迭代器,用于遍历键值对 -
cbegin()
/cend()
:常量正向迭代器
-