set的常见用法详解

set译为集合,是一个内部自动有序且不含重复元素的容器

有时出现需要去掉重复元素的情况

而且有可能因这些元素比较大或者类型不是int型而不能直接开散列表

在这种情况下就可以用set来保留元素本身而不考虑它的个数

当然

上面的情况也可以再开一个数组进行下标和元素的对应来解决

但是set提供了更为直观的接口

并且加入set之后可以实现自动排序

头文件#include<set>

using namespace std;

1、set的定义

set<typename>name;

与vector相同,大部分STL都是这样的

2、set容器的访问

只能通过迭代器访问

set<typename>::iterator it;

可以通过*it来访问set里的元素

除开vector和string之外的STL容器都不支持*(it+i)的访问方式

只能按以下方式进行枚举

 
  1. #include<cstdio>

  2. #include<iostream>

  3. #include<cstring>

  4. #include<algorithm>

  5. #include<cmath>

  6. #include<set>

  7. using namespace std;

  8. int main()

  9. {

  10. set<int> st;

  11. st.insert(3);

  12. st.insert(5);

  13. st.insert(2);

  14. st.insert(3);

  15. for(set<int>::iterator it=st.begin();it!=st.end();it++)

  16. {

  17. printf("%d",*it);

  18. }

  19. return 0;

  20. }

不支持it<st.end()的写法

可以发现,set内的元素自动递增排序,且自动去除了重复元素

3、set常用函数

(1)insert()

insert(x)可将x插入set容器中,并自动递增排序和去重

(2)find()

find(value)返回set中对应值为value的迭代器

 
  1. #include<cstdio>

  2. #include<iostream>

  3. #include<cstring>

  4. #include<algorithm>

  5. #include<cmath>

  6. #include<set>

  7. using namespace std;

  8. int main()

  9. {

  10. set<int> st;

  11. for(int i=1;i<=3;i++)

  12. {

  13. st.insert(i);

  14. }

  15. set<int>::iterator it=find(2);

  16. printf("%d\n",*it);

  17. return 0;

  18. }

(3)erase()

①删除单个元素

st.erase(st.find(100));

st.erase(value)

value就是所需要删除的值

②删除一个区间内的所有元素

st.erase(first,last)可以删除一个区间内的所有元素

其中first为所需要删除区间的起始迭代器,而last则为所需要删除区间的末尾迭代器的下一个地址

[first,last)

set<int>::iterator it=st.find(30);

st.erase(it,st.end());

删除元素30至set末尾之间的元素

(4)size()

用来获取set内元素的个数

(5)clear()

用来清空set中的所有元素

4、set的常见用途

set最主要的作用是自动去重并按升序排序,因此碰到需要去重但是不方便直接开数组的情况,可以尝试用set

延伸:

set中元素是唯一的,如果需要处理不唯一的情况

则需要使用multiset

C++11标准中还增加了unordered_set

以散列代替set内部的红黑树

(一种自平衡二叉查找树)

使其可以用来处理只去重但不排序的需求

速度比set快很多

知识点来自于《算法笔记》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 中的 TIMESTAMP 类型是一种日期和时间类型,可以存储从 '1970-01-01 00:00:01' 到 '2038-01-19 03:14:07' 之间的日期和时间。它占用 4 个字节的存储空间,精度为秒级。 TIMESTAMP 类型的存储方式有两种: 1. 以整数形式存储时间戳,以秒为单位,从 1970 年 1 月 1 日 00:00:01(UTC)开始计算。 2. 以日期时间字符串形式存储,格式为 'YYYY-MM-DD HH:MM:SS',时区为当前连接的时区。 下面是 TIMESTAMP 类型的一些常见用法: 1. 定义 TIMESTAMP 类型的列 可以使用以下语句定义 TIMESTAMP 类型的列: ``` CREATE TABLE 表名 ( 列名 TIMESTAMP, ... ); ``` 2. 插入 TIMESTAMP 类型的数据 可以使用以下语句插入 TIMESTAMP 类型的数据: ``` INSERT INTO 表名 (列名) VALUES ('2021-01-01 12:00:00'); ``` 当插入 TIMESTAMP 类型的数据时,如果数据是以字符串形式插入的,MySQL 会自动将其转换为整数形式存储。 3. 更新 TIMESTAMP 类型的数据 可以使用以下语句更新 TIMESTAMP 类型的数据: ``` UPDATE 表名 SET 列名 = '2021-01-02 12:00:00' WHERE 条件; ``` 4. 使用 TIMESTAMPDIFF() 函数计算时间差 可以使用 TIMESTAMPDIFF() 函数计算两个 TIMESTAMP 类型的时间差,单位可以是秒、分钟、小时、天、周、月或年。以下是计算两个 TIMESTAMP 类型的时间差的示例: ``` SELECT TIMESTAMPDIFF(SECOND, '2021-01-01 00:00:00', '2021-01-02 12:00:00'); -- 返回 129600 SELECT TIMESTAMPDIFF(DAY, '2021-01-01 00:00:00', '2021-01-02 12:00:00'); -- 返回 1 ``` 以上就是 TIMESTAMP 类型的用法详解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值