STL01_set详解

set的特性是所有元素都会根据元素的键值自动被排序,所以下面的操作都是对排好序之后的容器进行操作,而不是插入的顺序。简单来说,set就好似二叉搜索树,所谓的二叉搜索树有以下两个特性:

        (1).将所有小于头节点的数据放置在左边

        (2).将所有大于头节点的数据放置在右边

所有的言语不如图让明白来的更快,请看下面的图所示:

        

如果学过数据结构与算法的朋友或许会很熟悉。set特性是所有数据会自动排序,其实内部的操作跟上图相似,一开始插入数据就已经进行排序,然后通过深度优先搜索进行打印得到的就是排好序的数据了。 这里主要就是学习set操作,对于深度优先搜索要是有兴趣的朋友可以自己去学习一下。

1.set构造函数
        set<T> st;    // set默认构造函数
        multiset<T> mst;    // multiset默认构造函数
        set<T> st(const set& st1);    // 拷贝构造函数到自身

 

 2. set赋值操作
        set& operator=(const set& st);    // 重载=操作符
        set.swap(const set& st);    // 交换两个容器

3. set大小操作
        set.size();     // 返回容器的大小
        set.empty();    // 判断容器是否为空

4. set插入与删除操作
        set.insert(elem);    // 在容器中插入元素elem
        set.clear();    // 清楚所有元素
        set.erase(const_set::iterator pos);// 删除迭代器位置pos的元素,返回下一个数据的位置
        set.erase(elem);    // 删除容器中值为elem的元素
        set.erase(beg, end);    // 删除[beg, end)区间的所有元素,返回下一个元素的位置 

这里需要注意一些细节,就是在使用erase删除的时候,删除的是排好序之后的容器位置,而不是插入的顺序,如图中插入的数据,使用erase删除第二位置的元素,应该是20,而不是30。还有一点需要注意的是,erase(需要删除的位置),如果你需要删除第三个位置的元素,不可以这样:set<int>::const_iterator it = st.begin();   erase(it+3),直接进行加操作是不可以的,需要使用++,应该为:erase(++(++it))

 5. set查找操作
        set.find(key);    // 通过键key是否存在,若存在则返回该键的元素的迭代器,若不存在则返回set.end()
        set.count(key);   //查找键key的元素个数,返回的是0或者1,因为key键是不存在重复的
        set.lower_bound(keyElem);    // 返回第一个key>=keyElem元素的迭代器,返回的是下限的迭代器,没有下限返回的是st.end()
        set.upper_bound(keyElem);    // 返回第一个key>keyElem元素的迭代器,返回的是上限的迭代器
        set.equal_range(keyElem);    // 返回容器中key与keyELem相等的上下限的两个迭代器,以对组的方式存储上下限(和下面对组一起)

 

 

对组:对组(pair)将一对值组合成一个值,这一对值具有不同的数据类型或者相同的数据类型,两个值可以分别用pair的两个共有属性first和second
模板:templat(class T1, class T2) struct pair

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值