STL源码剖析(侯捷版本) —— 第五章 关联式容器(二)

C++ STL set 容器

set 的底层机制

set 的底层实现是红黑树(RB-tree)。红黑树是一种自平衡的二叉搜索树,它确保元素有序并支持高效的查找、插入和删除操作。

set 的特点

  • 元素有序set 会自动根据键值的顺序排列元素,保证元素是有序的。
  • 元素唯一set 不允许插入重复元素,因此每个元素在集合中是唯一的。

set 的迭代器

由于 set 的底层实现是红黑树,其迭代器被定义为红黑树的 const_iterator 类型,因此无法通过迭代器修改元素的值。

set 类模板定义

template <class _Key, class _Compare, class _Alloc>
class set {
    
private:
    typedef _Rb_tree<key_type, value_type, 
                  _Identity<value_type>, key_compare, _Alloc> _Rep_type;  // set 的底层实现为 RB-tree
    _Rep_type _M_t;  // 红黑树表示 set
    
    typedef typename _Rep_type::const_iterator iterator; // iterator 的类型为 const_iterator
};

set 的总结

  • 元素有序:插入的元素会根据键值自动排序。
  • 元素不能重复set 中的元素是唯一的,插入相同的元素会被忽略。

示例代码

插入和查找元素

#include <iostream>
#include <set>

int main() {
    
    std::set<int> mySet;
    
    // 插入元素
    mySet.insert(1);
    mySet.insert(3);
    mySet.insert(2);
    
    // 查找元素
    if (mySet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值