C++ STL列表、向量和集合的底层数据结构是什么?

C++ STL列表、向量和集合的底层数据结构是什么?,c++,list,stl,vector,set,C++,List,Stl,Vector,Set,STL列表、向量和集合的底层数据结构是什么 我的解决方案: 向量:(动态分配)数组 名单: set:heap(或一个二叉树,其中所有叶节点尽可能位于左侧,并将min/max元素保持在顶部) 是吗?根据评论,澄清一下,这些是最常见的选择,但根据所需的复杂性和其他因素,这些实现的支持可能会有所不同: =动态调整数组大小 列表= Set=(平衡二叉搜索树) 我想你可能把堆和BST搞混了。堆被可视化为树,但它实际上构建在可索引列表结构(例如数组或向量)之上。C++通过STL提供堆函数。BST更多的是

STL列表、向量和集合的底层数据结构是什么

我的解决方案:

  • 向量:(动态分配)数组
  • 名单:
  • set:heap(或一个二叉树,其中所有叶节点尽可能位于左侧,并将min/max元素保持在顶部)

是吗?

根据评论,澄清一下,这些是最常见的选择,但根据所需的复杂性和其他因素,这些实现的支持可能会有所不同:

=动态调整数组大小

列表=

Set=(平衡二叉搜索树)


我想你可能把堆和BST搞混了。堆被可视化为树,但它实际上构建在可索引列表结构(例如数组或向量)之上。C++通过STL提供堆函数。BST更多的是一种基于键/值的结构,用于高效查找(这是您通常想要的一组数据)。

该标准对使用的数据结构没有任何保证,只有复杂性保证,因此实现可以选择满足这些要求的任何结构


也就是说,
std::vector
通常是一个,
std::list
可能是一个,
std::set
通常是某种类型的。

这通常是正确的,但请注意,这不是唯一的选项(它依赖于实现)。@sgusc,map是红黑树,set不是因为它上面的元素没有排序。列表和链表之间有什么区别?“链表”的数据结构是什么?列表?这取决于实现,但标准要求的复杂性使得对急剧变化的实现几乎没有选择。@user1002288-
std::set
具有排序要求。C++11的
std::无序集
没有。A是一组在其前后(或
NULL
)都有对节点引用的节点。虽然在实践中您是对的,但标准库实现可以自由使用它喜欢的任何数据结构,只要它们满足标准中指定的保证和接口。实现定义了,但通常,
std::vector
是一个动态分配的数组
std::list
是一个双链接列表(C++11引入了
std::forward_list
,它是一个单链接列表),而
集合通常基于此,尽管符合标准中定义的接口的分摊复杂性和行为要求的任何东西都是可接受的实现。