c++ set是怎么实现的
作者:野牛程序员:2023-07-06 07:36:16 C++阅读 3719
C++ 中的 std::set 是一个有序的容器,它使用红黑树(Red-Black Tree)数据结构实现。红黑树是一种自平衡的二叉查找树,具有以下特性:
每个节点要么是红色,要么是黑色。
根节点是黑色的。
所有叶子节点(NIL 节点,即空节点)都是黑色的。
如果一个节点是红色的,那么它的两个子节点都是黑色的。
对于每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点。
根据这些特性,红黑树可以确保树的高度是对数级别的,从而提供高效的插入、删除和查找操作。
std::set 中的元素是按照升序排序的,并且每个元素都是唯一的。如果要使用自定义的排序准则,可以通过提供一个比较函数(或函数对象)来实现。插入、删除和查找操作的时间复杂度是 O(log n),其中 n 是 std::set 中的元素数量。
下面是一个简单的示例代码,展示如何使用 std::set:
#include <iostream>
#include <set>
int main() {
std::set<int> mySet;
// 插入元素
mySet.insert(5);
mySet.insert(2);
mySet.insert(8);
mySet.insert(1);
// 遍历并打印元素
for (const auto& element : mySet) {
std::cout << element << " ";
}
std::cout << std::endl;
// 查找元素
auto it = mySet.find(2);
if (it != mySet.end()) {
std::cout << "Found element: " << *it << std::endl;
}
// 删除元素
mySet.erase(5);
return 0;
}以上代码创建了一个 std::set 对象 mySet,并插入了一些元素。然后通过循环遍历打印了元素,并使用 find 函数查找了元素 2。最后,使用 erase 函数删除了元素 5。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

