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;
}

  

  

 

posted @ 2018-03-13 20:20  逃往火星的猫  阅读(276)  评论(0编辑  收藏  举报