zoukankan      html  css  js  c++  java
  • STL中set的用法

     set,顾名思义,就是数学上的集合——每个元素最多只出现一次,并且set中的元素已经从小到大排好序。

    头文件:#include<set>

    常用的函数:

    begin()        返回set容器的第一个元素的地址

    end()      返回set容器的最后一个元素地址

    clear()          删除set容器中的所有的元素

    empty()     判断set容器是否为空

    max_size()     返回set容器可能包含的元素最大个数

    size()      返回当前set容器中的元素个数

    erase(it)             删除迭代器指针it处元素

    样例如下:

     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     set<int> s;
     9     s.insert(1);
    10     s.insert(2);
    11     s.insert(3);
    12     s.insert(1);
    13     cout<<"set 的 size 值为 :"<<s.size()<<endl;
    14     cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl;
    15     cout<<"set 中的第一个元素是 :"<<*s.begin()<<endl;
    16     cout<<"set 中的最后一个元素是:"<<*s.end()<<endl;
    17     s.clear();
    18     if(s.empty())
    19     {
    20         cout<<"set 为空 !!!"<<endl;
    21     }
    22     cout<<"set 的 size 值为 :"<<s.size()<<endl;
    23     cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl;
    24     return 0;
    25 }

    还有两个功能类似的函数:count()和find()

    1.count() :用来查找set中某个元素出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。

    2.find():   用来查找set中某个元素出现的位置。如果找到,就返回这个元素的迭代器,如果这个元素不存在,则返回 s.end() 。 (最后一个元素的下一个位置,s为set的变量名)

    样例如下:

     1 #include <iostream>
     2 #include <set>
     3 
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     set<int> s;
     9     set<int>::iterator it;        //创建一个他对应的迭代器
    10 
    11     s.insert(1);
    12     s.insert(2);
    13     s.insert(3);
    14     s.insert(1);
    15     cout<<"set 中 1 出现的次数是 :"<<s.count(1)<<endl;
    16     cout<<"set 中 4 出现的次数是 :"<<s.count(4)<<endl;
    17 
    18      it1 = st1.find(4);            //查找数据
    19     if (it1 != st1.end())        //如果找到就输出数据
    20     {
    21         cout <<  *it1 << endl;
    22     }
    23 
    24     return 0;
    25 }

    set的遍历,需要用到迭代器,具体的方法见下面的代码:

     1 ##include <iostream>
     2 #include<set>
     3 using namespace std;
     4 
     5 
     6 int main()
     7 {
     8     set<int> s;                //创建一个int类型的set
     9  ##include <iostream>
    10 #include<set>
    11 using namespace std;
    12 
    13 
    14 int main()
    15 {
    16     set<int> s;                //创建一个int类型的set
    17  
    18     s.insert(10);                //插入数据
    19     s.insert(30);
    20     s.insert(20);
    21     s.insert(40);                
    22 
    23     //遍历数据,用迭代器遍历数据
    24     for (set<int>::iterator it = s.begin(); it != s.end(); ++it)    
    25     {
    26         cout << *it << endl;
    27     }
    28     //这里用到了set中的元素已经从小到大排好序的性质
    29     
    30     return 0;
    31 }
    32     s.insert(10);                //插入数据
    33     s.insert(30);
    34     s.insert(20);
    35     s.insert(40);                
    36 
    37     //遍历数据,用迭代器遍历数据
    38     for (set<int>::iterator it = s.begin(); it != s.end(); ++it)    
    39     {
    40         cout << *it << endl;
    41     }
    42     //这里用到了set中的元素已经从小到大排好序的性质
    43     
    44     return 0;
    45 }

    最后,不得不提的就是结构体类型(struct )的set ,使用时必须要重载 '<' 运算符

     1 #include<iostream>
     2 #include<set>
     3 #include<string>
     4 using namespace std;
     5 struct Info
     6 {
     7     string name;
     8     double score;
     9     bool operator < (const Info &a) const // 重载“<”操作符,自定义排序规则
    10     {
    11         //按score由大到小排序。如果要由小到大排序,使用“>”即可。
    12         return a.score < score;
    13     }
    14 };
    15 int main()
    16 {
    17     set<Info> s;
    18     Info info;
    19 
    20     //插入三个元素
    21     info.name = "Jack";
    22     info.score = 80;
    23     s.insert(info);
    24     info.name = "Tom";
    25     info.score = 99;
    26     s.insert(info);
    27     info.name = "Steaven";
    28     info.score = 60;
    29     s.insert(info);
    30 
    31     set<Info>::iterator it;
    32     for(it = s.begin(); it != s.end(); it++)
    33         cout << (*it).name << " : " << (*it).score << endl; 
    34     return 0;
    35 }
    36 /*
    37 运行结果:
    38 Tom : 99
    39 Jack : 80
    40 Steaven : 60
    41 */

    更多代码请进入:https://github.com/tomatoschool 

  • 相关阅读:
    ​《数据库系统概念》5-连接、视图和事务
    ​《数据库系统概念》4-DDL、集合运算、嵌套子查询
    ​《数据库系统概念》3-主键、关系运算
    ​《数据库系统概念》2-存储、事务等的简介
    ​《数据库系统概念》1-数据抽象、模型及SQL
    Web API与JWT认证
    巨杉Tech | 十分钟快速搭建 Wordpress 博客系统
    巨杉内核笔记(一)| SequoiaDB 会话(session)简介
    SequoiaDB巨杉数据库入门:快速搭建流媒体服务器
    微服务?数据库?它们之间到底是啥关系?
  • 原文地址:https://www.cnblogs.com/zxfzxf/p/9749508.html
Copyright © 2011-2022 走看看