【C++】【数据结构】【API列表】标准库数据结构

标准库数据结构

unordered_set

头文件:#include <unordered_set>

特性:

  • 唯一性:所有元素唯一,重复插入无效
  • 无序性:元素存储顺序不固定
  • 自定义类型:若存储自定义类型需提供哈希函数和相等比较器

成员函数:

基本操作函数

  1. 构造函数

    • unordered_set<T>():创建空容器
    • unordered_set<T>(initializer_list):通过初始化列表构造(如 {1, 2, 3}
    • unordered_set<T>(size_type n):指定初始桶数量构造
  2. 插入元素

    • insert(const T& value):插入单个元素(若已存在则不插入)
    • insert(initializer_list):插入多个元素
    • emplace(args...):原地构造元素插入,效率高于insert

查找与统计

  1. 查找元素

    • find(const T& key):返回指向元素的迭代器,若未找到则返回end()
    • count(const T& key):返回元素存在次数(0或1)
  2. 范围查找

    • equal_range(key):返回包含匹配元素的迭代器范围(pair<iterator, iterator>

删除元素

  • erase(const T& key):删除指定元素
  • erase(iterator pos):通过迭代器删除指定位置元素
  • clear():清空所有元素

容量与状态

  • size():返回当前元素数量
  • empty():判断容器是否为空
  • max_size():返回容器最大可能容纳元素数量
  • load_factor():返回当前负载因子(元素数/桶数)
  • max_load_factor():获取或设置最大负载因子阈值

哈希与桶管理

  1. 哈希函数

    • hash_function():返回容器使用的哈希函数对象
  2. 桶操作

    • 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())或调整负载因子可减少哈希冲突

成员函数:

基本操作函数

  1. 构造函数

    • unordered_map<Key, T>():创建空容器
    • unordered_map<Key, T>(initializer_list):通过初始化列表构造键值对(如 {``{"apple", 1}, {"banana", 2}}
    • unordered_map<Key, T>(size_type n):指定初始桶数量构造
  2. 插入元素

    • insert(const pair<Key, T>& kv):插入单个键值对(若键存在则不插入)
    • emplace(Key k, T v):原地构造键值对插入,避免拷贝开销,效率更高
    • operator[]:通过键直接插入或修改值(若键不存在则创建默认值)
    • insert_or_assign(Key k, T v):若键存在则覆盖旧值,否则插入新键值对(C++17引入)

查找与访问

  1. 键值访问

    • at(Key k):返回键对应的值,若键不存在抛出std::out_of_range异常
    • operator[]:通过键访问值,若键不存在则插入默认值
  2. 查找操作

    • 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():获取或设置最大负载因子阈值(触发扩容的阈值)

哈希与桶管理

  1. 哈希函数与桶操作

    • hash_function():返回容器使用的哈希函数对象
    • bucket_count():返回当前桶的总数
    • bucket(Key k):返回键所在桶的编号
    • bucket_size(n):返回第n个桶中的元素数量
    • rehash(n):调整桶数量为n并重新分布元素
    • reserve(n):预分配至少容纳n个元素的桶,避免多次扩容

迭代器相关

  • begin() / end():正向迭代器,用于遍历键值对
  • cbegin() / cend():常量正向迭代器
相关推荐
Suxing927 分钟前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法
啦啦啦啦啦zzzz30 分钟前
moduo网络库 Acceptor TcpConnection
服务器·网络·c++·reactor·网络库
键盘会跳舞33 分钟前
C++:右值引用与移动语义源码级深度拆解——现代C++性能优化的语言基石
c++·右值引用·移动语义
码匠许师傅42 分钟前
【C++ 面试真题】聊聊 C++ 的虚函数和多态
java·c++·面试
LuminousCPP1 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
逆境不可逃1 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
c238562 小时前
《算法武林谱:四大排序神功与二分寻宝术全解》
数据结构·算法·排序算法
djjjx.2 小时前
【 C++ 】多态
开发语言·c++·多态
OpenApi.cc2 小时前
MoCode — AI Agent Server (Docker) + macOS Desktop Client(开源项目)
数据结构·人工智能·深度学习·神经网络
Mem0rin2 小时前
二分查找:左右边界
数据结构·算法