STL_set

Standard Template Library

在这一篇中我开始学习集合这个容器,即set。

1.头文件

#Include <set>
using namespace std;

2.定义
与vector的定义类似例如:set s;
就定义了一个存储数据类型为TYPE的名叫s的集合。
3.关于set的一些基本操作和函数

  • s.insert(‘A’)-----O(logn)
    在集合中插入一个 A字符
  • s.erase(‘B’)-----O(logn)
    在集合中删除一个’B’字符,特别地,如果集合中没有该元素,那么不会执行删除操作,也不会报错。
  • s.count(‘C’)-----O(logn)
    统计集合中C的个数,因为集合元素具有不重复性所以,只可能有1个或者0个。
  • s.clear() ----- O(n)
    与vector类似,只会使得长度变为0,不会释放内存。
  • s.sizse()-----O(1)
    返回集合的长度,与手写的链表类似,长度是直接保存着的,所以时间复杂度为O(1)。
  • set::iterator it
    集合元素的索引需要迭代器,迭代器可以想象与指针类似,上面是定义了一个迭代器,后面通过例子来具体体会迭代器。

下面还是来看一个例子:

#include <iostream>
#include <set>
using namespace std;
int main()
{
    set <char> s;
    s.insert('D'); //向集合中插入元素
    s.insert('A');//插入时是无序的,但集合会默认生序排列
    s.insert('C');
    s.insert('B');
    
    set<char>::iterator it;
    for(it=s.begin();it != s.end();it++)
    {
        printf("%c ",*it);
    }
    printf("\n");

    s.erase('a');//删除集合中没有的元素不会报错,但是也不会有任何操作
    s.erase('A');

    for(it=s.begin();it != s.end();it++) //集合放入元素后默认从小到大放置
    {
        printf("%c ",*it);
    }
    printf("\n");

    //再看一下s中的元素
    for(it=s.begin();it != s.end();it++)
    {
        printf("%c ",*it);
    }
    printf("\n");

    printf("length = %d\n",(int)s.size());


    if((int)s.count('B')) printf("B belong to the set s!\n");
    
    s.clear();

    printf("length = %d",(int)s.size());


    return 0;
}

运行结果如下:

A B C D 
B C D 
B C D 
length = 3
B belong to the set s!
length = 0

ps:集合与结构体一起使用需要重载小于号,因为集合不知道怎么来排列结构体,需要人为给它一个排列结构体的规则。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值