STL容器的有序性与重复性
发表于:2024-12-21 | 分类: C++
字数统计: 311 | 阅读时长: 1分钟 | 阅读量:

STL容器有序性和重复性

总结

容器 有序性 允许重复 描述
std::map 有序的键值对,不允许重复键。
std::list 按插入顺序存储,允许重复。
std::vector 按插入顺序存储,允许重复。
std::set 有序集合,不允许重复。
std::multimap 有序的键值对,允许重复键。
std::multiset 有序集合,允许重复值。

问题

Q1: 为什么 std::setstd::map 是有序的?

  • 因为它们的底层数据结构是红黑树,红黑树在插入元素时会保持元素的顺序性(默认升序)。
  • 插入和删除操作时,红黑树通过旋转和重新着色保持顺序和平衡。

Q2: std::vectorstd::list 有序吗?有什么区别?

  • 它们是有序的,但仅仅是 按插入顺序 保存元素。
  • 区别:
    • std::vector 是连续存储,支持随机访问,时间复杂度为 O(1)
    • std::list 是双向链表存储,支持高效的插入和删除,但随机访问时间复杂度为 O(n)

Q3: std::setstd::multiset 的区别?

  • std::set 不允许重复元素。
  • std::multiset 允许重复元素,但仍然按顺序存储。
上一篇:
STL库算法
下一篇:
STL库set