STL 中set的用法

STL中的set

set原理

  • set封装了很多复杂的数据结构和算法以及大量的操作。Vector封装了数组,list封装了链表,map和set封装了二叉树。并且又对编程提供了统一的操作。
    set是关联式容器,内部也是一个平衡检索二叉树(红黑树RB),是容器也能存储相同类型的数据结构,并且set中的元素值都是唯一的。并且会自动进行排序。注意set中元素的值不能直接被改变
    -> 关联式容器如下图
    这里写图片描述

    说明

    • set插入和删除的效率比用其它序列容器要高。因为关联式容器不会做内存的拷贝和移动。只有指针的转换所以很快
    • 每次插入之后,以前保存的iterator不会失效,原因是同样的,内存没有移动。也vector不同,因为vector每次删除和插入都可能要操作内存也可能push_back空间不足重新申请新的都有可能更改指针。切记不要使用过期的iterator
    • 查找用的是二分查找时间复杂度为logn

    常用操作

    • begin() 返回第一个元素
    • end() 返回最后一个元素
    • clear() 删除set集合的所有的元素
    • empty() 判断是否为空 begin()和end()是不是检查是否为空的所以自己要做一个判断
    • count()判断每个键值出现的次数
    • max_size() 返回最大的元素个数
    • size() 返回当前set容器中所有元素的个数
    • rbegin() 返回和end()一样的值 r是反向的意思
    • rend() 返回和begin()一样的值
    • insert() 插入元素,可以插入一个容器如:insert(ivec.begin(), ivec.end())
    • erase() 删除指定的元素
    • find() 若找到就返回迭代器的位置,如果没有返回最后一个值
    • set set1; //创建一个名为set1的空set对象,其键类型为k
  • set set2(set1); //创建set1的副本set2,set2与set1必须有相同的键类型和值类型

  • set set3(b, e); //创建set类型的对象set3,存储迭代器b和e标记的范围内所有元素的副本。元素的类型必须能转换为k类型

  • lower_bound() 返回指向大于或等于某值的第一个元素的迭代器
  • upper_bound() 返回大于某个元素的迭代器
  • swap() 交换两个集合

相关代码

class Solution {
public:
    int numJewelsInStones(string J, string S) {
          int res = 0;
        set<char> setJ(J.begin(), J.end());
        for (char s : S) if (setJ.count(s)) res++;
        return res;

    }
};

-> 开始就是做,别停在说上。工作内容很杂,但是自己一定要用自己专长一点的东西。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值