我们在 std::map 或 std::set 中有什么样的排序
What kind of sorting do we have in std::map or std::set?
如果我们在std::set中插入随机整数,并读取集合,我们会得到有序序列。基本上,我们有隐式排序。但是,我们这里有什么样的排序算法?是堆排序吗?
至少在正常情况下,它是树排序。也就是说,将项目插入到平衡的二叉搜索树(通常是红黑树)中,并按顺序遍历该树。
std::set
和std::map
通常使用自平衡二叉搜索树来实现,通常是红黑树,因为它们在实践中往往是最快的。有关这些数据结构的详细信息,您可能需要查阅教科书,例如Cormen等人的算法简介或Sedgewick的算法。
C++ 标准不对std::set
或std::map
强制执行任何类型的排序算法。因此,它们的实现可能因不同平台而异。
话虽如此,它们通常实现为红黑树,这是一个自平衡的二叉搜索树。它们不对其内容进行排序,而是在插入新项目时保持其内容的顺序。向它们插入单个项目通常是 O(logn)。
相关文章:
- 使用std::multimap迭代器创建std::list
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从持续时间构造std::chrono::system_clock::time_point
- std::具有相同基类的类的变体
- std::向量与传递值的动态数组
- 使用std::vector的OpenCL矩阵乘法
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- std::condition_variable::wait()如何评估给定的谓词
- 如何获取std::result_of函数的返回类型
- std::原子加载和存储都需要吗
- 将对象移动到std::shared_ptr
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 使用一个考虑到std::map中键值的滚动或换行的键
- 如何从 std::atomic 中提取指针 T<T>?
- 为什么 std::unique 不调用 std::sort?
- 我们在 std::map 或 std::set 中有什么样的排序
- 它使用什么样的二进制搜索树来实现“std::set”