• C++ STL set学习笔记


    介绍:

      set,集合,即在set中的元素都是唯一的,并且默认自动升序排列,因此常用于去重操作。set 的底层使用的是红黑树,插入删除操作时仅仅需要指针操作节点即可完成,不涉及内存的移动和拷贝,效率比较高。set中的元素根据其值的大小在红黑树中有特定的位置,是不可移动,所以查找操作效率会很高(log N)并且 set 中元素的值不可改变。set不会重复插入相同的元素,采用忽略处理,如果需要集合中的元素允许重复,那么可以使用 multiset 。

    用法:

    1.头文件

    #include<set>
    

    2.定义方式

    set<int>set_1;
    set<string>set_2;
    set<node>set_3;
    set<type>::iterator it; //定义 type 类型的迭代器

    3.常用函数总结

    • S.insert(date);   //插入数据 date
    • S.erase(date);   //删除数据 date
    • S.find(date);      //如果存在,返回 date 的迭代器,如果 date 不存在,返回 S.end();
    • S.begin();    //开始指针
    • S.end();       //末尾指针+1
    • S.empty();   //判断 set 是否为空
    • S.clear();     //清空 set 里的所有元素
    • S.size();      //返回 set 中的元素个数

    4.自定义比较函数 

    #include<iostream>
    #include<set>
    using namespace std;
    struct node
    {
        int a,b;
        bool operator < (const node &temp) const   //重载“<"操作符,自定义排序规则
        {
            if(a<temp.a||(temp.a==a&&b<temp.b))
                return 1;
            return 0;
        }
    };
    int main()
    {
        node temp;
        set<node>S;
        int n;
        cin>>n;
        for(int i=0;i<n;++i)
        {
            cin>>temp.a>>temp.b;
            S.insert(temp);
        }
        set<node>::iterator it;
        for(it=S.begin();it!=S.end();++it)
        {
            cout<<it->a<<" "<<it->b<<endl;
        }
        return 0;
    }
    

      

      

  • 相关阅读:
    最近有点不顺心
    存储过程传入datatable
    mvc下添加 EntityFramework的引用
    vmstat,iostat,sar命令详解
    oracle job interval·相关事例
    dbms_job和dbmsi_job
    数据库hang住 处理过程
    Library cache lock 故障解决一例
    dbms_job涉及到的知识点
    V$SESSION_LONGOPS
  • 原文地址:https://www.cnblogs.com/l1l1/p/8561371.html
Copyright © 2020-2023  润新知