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。

  • 相关阅读:
    C程序设计语言学习笔记(二)
    字符串处理代码(国际化转换C++版) 荣
    取得MySQL数据库表,列信息的SQL语句 荣
    C++中,以类成员函数指针作为参数对std::map中的元素进行迭代处理 荣
    我的我的C#数据库操作类(与大家交流) 荣
    以较少代码实现DataGrid的排序,翻页,删除等功能 荣
    批处理文件的学习 荣
    DLL内存管理模板类 荣
    我的C++数据库访问库 荣
    我的C++数据库访问库临界区处理类 荣
  • 原文地址:https://www.cnblogs.com/mrclr/p/8410456.html
Copyright © 2011-2022 走看看