zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    hdu1003 最大连续子序和
    ACM 线性规划
    ACM 概率&&动态规划
    ACM 数论 质因数分解
    ACM 计数
    ACM 概率
    ACM矩形嵌套问题LIS
    ACM 编辑距离
    ACM线性方程
    ACM 错排
  • 原文地址:https://www.cnblogs.com/mrclr/p/8410456.html
Copyright © 2011-2022 走看看