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

C++八股 —— map/unordered_map

1. 底层数据结构

map —— 红黑树

随处可见的红黑树:原理、实现及应用场景 - 知乎

unordered_map —— 散列表

[C++] 哈希表(散列表)详解_c++哈希表-CSDN博客

2. 常见面试题

  1. 底层为红黑树的容器有哪些

    • map
    • multimap
    • set
    • multiset
  2. 红黑树和AVL树的区别

    • 平衡规则不同:
      • AVL树左右子树的高度差最大为1
      • 红黑树的左右子树黑节点的高度相同
    • 红黑树的平衡代价更小,插入和删除的效率更高
    • AVL树提供更严格的平衡,查找性能更优
    • 红黑树使用内存更多
  3. unordered_map是否有缩容操作

    没有;负载因子超过阈值之后会有扩容操作,但是不会有自动缩容;

    提供了接口,可以自己实现:

    bucket_count; // 哈希桶个数
    load_factor;  // 获取当前负载因子
    rehash(n);    // 将哈希桶的个数设置为n,并执行rehash操作
    reserve(n);   // 分配容纳n个元素的适当桶数,并执行rehash
    
    template<typename Key, typename Value>
    class CustomUnorderedMap {
    private:std::unordered_map<Key, Value> map;// 检查是否需要缩容void checkShrink() {if(map.size() > 1 && map.load_factor() < 0.1) {map.reserve(n: map.size());}}public:void erase(const Key& key) {map.erase(key);checkShrink();}
    }; 
    
  4. unordered_map有哪些性能优化

    • 预估元素数量并设置合适的哈希桶数量
    • 合适的哈希函数,避免大量冲突
    • 合适的负载因子(一般默认为0.7),max_load_factor
  5. mapunordered_map的区别

    • 底层数据结构不同:红黑树 - 散列表
    • 查找性能: O ( l o g n ) O(logn) O(logn) - O ( 1 ) O(1) O(1)
    • 是否有序:有序 - 无序
    • 内存使用:少 - 多
    • 使用场景:有序 - 无序
  6. key为字符串,且不区分大小 或 结构体 或类对象,怎么处理

    • map:重新实现比较函数
    • unordered_map:重新实现哈希函数和等于函数
http://www.xdnf.cn/news/4892.html

相关文章:

  • 发那科机器人5(异常事件和程序备份加载+ROBOGUIDE离线仿真)
  • 服务器多客户端连接核心要点(1)
  • 计算机视觉】OpenCV项目实战:eye_mouse_movement:基于opencv实战眼睛控制鼠标
  • 【Python】Pycharm中安装库可靠的方法
  • 从AI到新能源:猎板PCB的HDI技术如何定义高端制造新标准?
  • Java设计模式之单例模式:从入门到精通
  • 大数据狙击金融欺诈——技术如何守护交易安全?
  • c++:双向链表容器(std::list)
  • C语言—指针3
  • 集群/微服务/分布式
  • 地平线rdk x5部署yolo11
  • el-form的label星号位置如何修改
  • 一个开源的快速准确地将 PDF 转换为 markdown工具
  • 动态规划-62.不同路径-力扣(LeetCode)
  • 量化解析美英协议的非对称冲击:多因子模型与波动率曲面重构
  • 支持向量机案例
  • springmvc实现文件上传
  • [6-1] TIM定时中断 江协科技学习笔记(45个知识点)
  • 布隆过滤器:高效的数据结构与应用详解
  • 通过Linux系统服务管理IoTDB集群的高效方法
  • C语言 第六章 结构体(2)
  • 大数据——Mac环境DataSpell集成Jupyter
  • 2025年5月通信科技领域周报(4.28-5.4):5G-A技术引领峰会通信 卫星通信加速全球化布局
  • 数据库系统概论(七)初识SQL与SQL基本概念
  • 小程序消息订阅的整个实现流程
  • 养生:开启健康生活的钥匙
  • buck和boost总结
  • B站pwn教程笔记-9
  • 使用 React Native实现鸿蒙开发的详细方案
  • 数据结构 集合类与复杂度