当前位置: 首页 > news >正文

【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()​:常量正向迭代器

相关文章:

  • DDPM(Denoising Diffusion Probabilistic Models,去噪扩散概率模型)
  • ✍️【TS类型体操进阶】挑战类型极限,成为类型魔法师!♂️✨
  • 如何理解参照权
  • Redis相关命令详解与原理
  • CSS手动布局
  • 【IP101】图像分割技术全解析:从传统算法到深度学习的进阶之路
  • leetcode刷题日记——反转链表
  • 【赵渝强老师】TiDB的备份恢复策略
  • 关于大疆红外图片提取温度方法 python 方法
  • Python初学者笔记第十一期 -- (字符串编程练习题)
  • 软开错题(二)
  • 【每日刷题】第2天
  • C++ 完美转发
  • qwen2.5vl
  • python爬虫爬取网站图片出现403解决方法【仅供学习使用】
  • Nvidia Orin 安装onnxruntime-gpu
  • 【无标题】MPC软件
  • 算法专题四:前缀和
  • 最优化方法Python计算:无约束优化应用——线性回归分类器
  • css内容省略——text-overflow: ellipsis
  • 《中国人民银行业务领域数据安全管理办法》发布,6月30日起施行
  • 重视体重管理,筑牢健康基石
  • 东亚社会的“苦难诗学”:从《苦尽柑来遇见你》说起
  • 广州下调个人住房公积金贷款利率
  • 售卖自制外挂交易额超百万元,一男子因提供入侵计算机系统程序被抓
  • 央视315晚会曝光“保水虾仁”后,湛江4家涉事企业被罚超800万元