请比较 set 和 unordered_set 的区别;如果 unordered_set 的常见操作为 O(1),还能进一步优化吗?请说明可能的优化方向。
考察说明
考察对 C++ 关联容器底层实现的理解、时间复杂度认识及性能优化分析能力
回答思路
- 准确说明 set 基于红黑树、有序、O(log n),unordered_set 基于哈希表、无序、平均 O(1)
- 指出 unordered_set 的 O(1) 是平均情况,最坏退化 O(n),可用良好哈希函数和负载因子控制
- 对 O(1) 的优化:优化哈希函数、调整桶大小、使用自定义分配器、考虑缓存局部性;无法突破平均 O(1) 下限,但可减少常数因子
- 对毫秒级要求,应区分单次操作和整体吞吐,抽象地提出基准测试与数据结构选型
本题已收录答题指导
本题附完整参考答案与评分标准
登录后可查看结构化答题指导;也可以直接开一场模拟面试,AI 面试官用本题实时追问并给出评分。