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 }
    View Code

    还有两个功能类似的函数: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 }
    View Code

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

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

    最后,不得不提的就是结构体类型(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 */
  • 相关阅读:
    Linux系统编程@文件操作(一)
    printf 格式化输出符号详细说明(转)
    SUID,SGID,Sticky Bit详解(转)
    GDB调试器
    GCC编译器
    Make和Makefile编写(详见GCC手册)
    嵌入式Linux开发——内容介绍与开发环境的搭建
    Linux驱动设计——字符设备驱动(一)
    用Socket做一个局域网聊天工具(转)
    linux下常用文件传输命令 (转)
  • 原文地址:https://www.cnblogs.com/yaoyueduzhen/p/4536929.html
Copyright © 2011-2022 走看看