• STL : set & multiset


    set和multiset都能对插入的元素进行自动排序,还能查前驱后继什么的,可以部分代替平衡树的功能。

    使用STL虽然常数大,但是可以减少码量,避免手打平衡树出现错误,提高代码准确度。

    set和multiset的区别就在于,set不支持重复元素,multiset支持重复元素。

    所以这里以set为例,讲一下最最基本的函数~

    定义set:set<int>s;

    迭代器:set<int>::iterator xxx;

    插入元素:s.insert(num);

    删除元素:s.erase(num);

      s.erase(一个数):会删掉与这个数相等的所有元素。

      s.erase(迭代器):只会删掉这个迭代器指向的元素。

    查询元素个数(multiset里比较有用):s.count(num);

    前驱:lower_bound(num)-1;

    后继:upper_bound(num);

    set的头和尾:s.begin(),s.end()-1;(s.end()为空)

    具体的看代码吧。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #include<set>
     5 
     6 // 迭代器 
     7 #define ite set<int>::iterator
     8 
     9 using namespace std;
    10 
    11 // 定义 
    12 set<int>s;
    13 
    14 int main()
    15 {
    16     // 插入 
    17     s.insert(5);
    18     s.insert(6);
    19     s.insert(15);
    20     s.insert(20);
    21     
    22     // 最小值、最大值 
    23     ite first,last;
    24     first=s.begin();
    25     last=s.end();last--;
    26     printf("%d %d
    ",*first,*last);
    27     
    28     // 前驱后继 
    29     ite pre,post;
    30     pre=s.lower_bound(10);pre--;
    31     post=s.upper_bound(10);
    32     printf("%d %d
    ",*pre,*post); 
    33     
    34     // 删除元素 
    35     s.erase(6);
    36     
    37     // 查询元素个数,multiset里比较有用 
    38     printf("%d
    ",s.count(6));
    39     
    40     // 前驱后继*2 
    41     pre=s.lower_bound(10);pre--;
    42     post=s.upper_bound(10);
    43     printf("%d %d
    ",*pre,*post);
    44     
    45     return 0;
    46 }

    注释是不是很良心QWQ

  • 相关阅读:
    JeeSite信息化快速开发平台
    Redis操作使用规范
    使用Redis配置JAVA_环境
    BZOJ 1029 [JSOI2007]建筑抢修 已更新
    COJ 2108 Day7-例1
    COJ 2105 submatrix
    COJ 2106 road
    更新一下缺省源
    hiho #1055 : 刷油漆
    COJ 0047 20702最大乘积
  • 原文地址:https://www.cnblogs.com/eternhope/p/9664279.html
Copyright © 2020-2023  润新知