• set


    set 是一个内部有序的数据结构,支持添加,删除元素,但不支持修改元素(所以想修改,就要先删再添)。

    别忘加上头文件 #include<set>

     

    1.声明

    和其他STL一样,set<int>s。 <> 内的是数据类型,后面的是名称。

     

    2.插入元素

    s.insert(5)。向 int 型 set 中插入了一个整数 5。

     

    3.查找

    s.find(5)。查找set中的5,一般这么写 if (s.find(6) == s.end())  ......,这意味着如果没找到 5,就执行下面的语句。

     

    4.求 set 的大小

    x = s.size()。注意的是,求出的 x 就是个数。如以下程序,输出的就是4

    1 #include <bits/stdc++.h>
    2 using namespace std;
    3 set<int>s;
    4 int main()
    5 {
    6     for(int i = 0; i < 4; i++) s.insert(i);
    7     printf("%d
    ", s.size());
    8     return 0;
    9 }

    5.遍历

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 set<int>s;
     4 int main()
     5 {
     6     for (int i = 0; i < 4; i++) s.insert(i);
     7     for(set<int>::iterator it = s.begin(); it != s.end(); it++)
     8         printf("%d ", *it);
     9     printf("
    ");
    10     return 0;
    11 }

    输出:0 1 2 3。it 可以理解为一个自己定义的指针,记住格式就好了。

     

    6.删除

    有两种方法,在 set 里面完全等效。(不过在 multiset 里就不一样了)

    (1) s.erase(5); 将 5 删除。

    (2) set<int>::iterator it = s.find(5); s.erase(it);

    7.lower_bound 和 upper_bound

    在 set 里面一样可以用,不过这么用:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 set<int>s;
     4 int main()
     5 {
     6     for (int i = 0; i < 4; i++) s.insert(i);
     7     set<int>::iterator it1 = s.lower_bound(2); printf("%d ", *it1);    //lower_bound(2)是找到第一个大于等于2的数 
     8     set<int>::iterator it2 = s.upper_bound(2); printf("%d", *it2);    //upper_bound(2)是找到第一个大于2的数
     9     printf("
    ");
    10     return 0;
    11 }

    输出:2 3

     

    划重点: set 可以去重,比如 inset(5) 操作了3次,但 set 里面就一个5。但 set 有一个弊端,就是没有下脚标,这样的话,就无法直接输出第 k 大(小)的数。

    顺便再说一下 multiset

    头文件也是 set。

    multiset 与 set 的区别就是,它允许集合中存在相同的元素,大部分操作和 set 一样,只需要将 set 改成 multiset 即可。但有一点不同。就是删除操作。

    还记得两种写法吗?

    (1) s.erase(5);  只不过这是删除 multiset 中的所有5。

    (2) set<int>::iterator it = s.find(3); s.erase(it); 而这只删除一个 5。

  • 相关阅读:
    迅为-IMX6Q开发板Android应用测试-AndroidStudio-录音机测试
    迅为3399开发板Linux固件编译
    迅为-i.MX6ULL开发板-Busybox移植DHCP(三)
    迅为-i.MX6ULL开发板-Busybox移植DHCP(二)
    itop4412开发板Qt串口编程-实现串口功能
    迅为iMX6D/Q/PLUS设备树 Android7.1.2 系统编译
    迅为3399开发板使用ADB命令传递文件到android设备
    Jlink如何校验Hex
    编码器芯片MLX90363的使用
    编程小技巧
  • 原文地址:https://www.cnblogs.com/mrclr/p/8410456.html
Copyright © 2020-2023  润新知