我们在 std::map 或 std::set 中有什么样的排序

What kind of sorting do we have in std::map or std::set?

本文关键字:std 什么样 排序 map 我们 set      更新时间:2023-10-16

如果我们在std::set中插入随机整数,并读取集合,我们会得到有序序列。基本上,我们有隐式排序。但是,我们这里有什么样的排序算法?是堆排序吗?

至少在正常情况下,它是树排序。也就是说,将项目插入到平衡的二叉搜索树(通常是红黑树)中,并按顺序遍历该树。

std::setstd::map通常使用自平衡二叉搜索树来实现,通常是红黑树,因为它们在实践中往往是最快的。有关这些数据结构的详细信息,您可能需要查阅教科书,例如Cormen等人的算法简介或Sedgewick的算法

C++ 标准不对std::setstd::map强制执行任何类型的排序算法。因此,它们的实现可能因不同平台而异。

话虽如此,它们通常实现为红黑树,这是一个自平衡的二叉搜索树。它们不对其内容进行排序,而是在插入新项目时保持其内容的顺序。向它们插入单个项目通常是 O(logn)。