当前位置:首页 C++ > 正文

c++ set是怎么实现的

作者:野牛程序员:2023-07-06 07:36:16 C++阅读 3719

C++ 中的 std::set 是一个有序的容器,它使用红黑树(Red-Black Tree)数据结构实现。红黑树是一种自平衡的二叉查找树,具有以下特性:

  1. 每个节点要么是红色,要么是黑色。

  2. 根节点是黑色的。

  3. 所有叶子节点(NIL 节点,即空节点)都是黑色的。

  4. 如果一个节点是红色的,那么它的两个子节点都是黑色的。

  5. 对于每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数目的黑色节点。

根据这些特性,红黑树可以确保树的高度是对数级别的,从而提供高效的插入、删除和查找操作。

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击