【问题标题】:How is the STL set/map internally sorted? [duplicate]STL set/map 是如何在内部排序的? [复制]
【发布时间】:2025-12-17 15:05:02
【问题描述】:

我知道像 set 和 map 这样的 STL 容器是排序的,但它们实际上是如何排序的?底层结构是什么?

我找不到任何关于它的书。


我是 C++ 初学者,请不要评判我。 :)

【问题讨论】:

  • std::map 通常建立在red-black tree 之上。
  • @CoryKramer,链接的问题都假定std::map 是使用红黑树实现的。问题“std::map 是如何实现的?”更合适。
  • 那么两者都在使用红黑树?我听说了一些关于严格的弱排序标准
  • 我把它当作 OP 询问它们是如何排序的?答案是默认情况下他们使用运算符< 小于。
  • @r3musn0x 你为什么在 cmets 部分回答?

标签: c++ sorting stl


【解决方案1】:

对于std::mapstd::set,它是由实现定义的排序方式。底层数据结构应该以某种方式对元素进行排序:

在内部,map 中的元素始终按其内部比较对象(Compare 类型)指示的特定strict weak ordering criterion 之后的键排序。

(同样适用于set。)

这些容器的典型数据结构是red black treebinary search tree

【讨论】: