2.set

set可以看作一个集合,可以实现自动排序(升序)和去重

在许多题目中,都可以使用这个模板库,减少很多操作,例如P1923 第k小数,当然,这道题有很多奇奇怪怪的做法,分值都不同,之后会讲解

set的定义

#include<set>    //头文件
using namespace std; //这条必须加
set<typename> a; //同vector一样,这里可以用不同的数据类型
set<typename> b[SIZE]; //定义set数组,有点类似vector的二维数组
//b[0]~b[SIZE-1]都为set容器

其实很多与vector相似的地方,其他的许多STL容器感觉也都差不多。接下来是set的遍历,和vector不一样的是,这里只能用迭代器遍历,不能使用数组下标

set<typename> name;
for(set<typename>::iterator it=name.begin();it!=name.end();it++){
cout<<*it<<" ";
} //只能使用迭代器访问

然后是涉及到的一些函数(都只介绍常用的);

①insert( ) insert(x),将x放入集合中,并自动去重和升序排序,时间复杂度为O(logN),N为元素个数

②find( ) find(x)返回set中对应值为x的迭代器,时间复杂度为O(logN)

③erase( ) 时间复杂度为O(1)

用法(1)erase(x)删除对应值为x的元素;用法(2),同find( )一起使用,erase(find(x)),用find找到x的迭代器,然后删除。

④同vector一样,可以使用clear( ),时间复杂度为O(N);size( ),时间复杂度为O(1)

另外,set和map都是用红黑树来实现

例题

P1932 第k小数

(一) 非常简单暴力的思路,直接用sort快排,输出,60分,超时

(二)学了set之后,因为set自动排序,就选用了set,至于找到第k个数,可以直接用迭代器初始值为a.begin( ),然后进行k次it++。结果只有20分,是因为set要去重,导致处理之后数据出错

	set<int>::iterator it = a.begin( );
while(--k)it++;
cout << *it;

(三)在查询了一些资料之后,发现有一个东西叫做multiset,和set的许多用法相同,但是他处理数据是不会进行去重的,只会升序排列。但是也只有60分,依然改变不了他超时的事实

	multiset<int>::iterator it = a.begin( );
while(k--)it++;
cout << *(it);

(四)无奈之下,通过题解,发现STL还有一个叫做nth_element的东西,nth_element(a,a+k,a+n),三个参数分别指(数组名,第k个,数组长度)当时直接给我看懵了,100分做法

	for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
nth_element(a+1,a+k+1,a+1+n);
printf("%d",a[k+1]);

当然还可以用二分做,但这里主要是讲set,就不阐述了,通过这道题,可以加深对set的一些理解,例如做题时的选择,是否考虑去重的问题,当然还有时间复杂度

STL初步学习(set)的更多相关文章

  1. STL初步学习(vector)

    前文 初三下学期进入新的学习,对于前两年的学习内容因为各种原因 上课打游戏,睡觉,看视频 已经遗忘,忘记如何使用,算是重新学习一次信息学,希望能尽快将以前的内容弥补上来,争取能在CSP-2020取得一 ...

  2. STL初步学习(queue,deque)

    4.queue queue就是队列,平时用得非常多.栈的操作是只能是先进先出,与栈不同,是先进后出,与之后的deque也有区别.个人感觉手写队列有点麻烦,有什么head和tail什么的,所以说 STL ...

  3. AcWing STL初步学习

    vector, 变长数组,倍增的思想 size() 返回元素个数 empty() 返回是否为空 clear() 清空 front()/back() push_back()/pop_back() beg ...

  4. STL初步学习(map)

    3.map map作为一个映射,有两个参数,第一个参数作为关键值,第二个参数为对应的值,关键值是唯一的 在平时使用的数组中,也有点类似于映射的方法,例如a[10]=1,但其实我们的关键值和对应的值只能 ...

  5. json2.js的初步学习与了解

    json2.js的初步学习与了解,想要学习json的朋友可以参考下. json2.js的初步学习与了解 1.)该js的下载地址是:http://www.json.org/json2.js 2.)在页面 ...

  6. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  7. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...

  8. EF Codefirst 初步学习(二)—— 程序管理命令 更新数据库

    前提:搭建成功codefirst相关代码,参见EF Codefirst  初步学习(一)--设置codefirst开发模式 具体需要注意点如下: 1.确保实体类库程序生成成功 2.确保实体表类库不缺少 ...

  9. 初步学习python

    自计算机诞生以来,也伴随着计算机语言的诞生,现在,全世界的编程语言有600多种,但流行的编程语言也就20多种. Java和C一直占据着前两名.但是近年来伴随着人工智能的发展,Python发展迅猛,以其 ...

随机推荐

  1. Java实现 LeetCode 347 前 K 个高频元素

    347. 前 K 个高频元素 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2,2,3], k = 2 输出: [1,2] 示例 2: 输 ...

  2. Java实现 蓝桥杯 算法训练 纪念品分组

    问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价 ...

  3. Java实现 蓝桥杯VIP 算法训练 字符串编辑

    算法训练 字符串编辑 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个字符串(长度<=40个字符),并以字符 '.' 结束.编辑功能有: 1 D:删除一个字符,命令的方式为 ...

  4. Java实现 洛谷 P1009 阶乘之和

    import java.util.Scanner; public class 阶乘之和 { public static void main(String[] args) { Scanner sc = ...

  5. 使用liunx系统自带的工具sar监控指定接口速率

    1.路由器双出口部署,接口可以实现负载分担,在接口负载比例设置为1:2之后,管理员反馈流量有些异常,内网tracert -d 外网域名或者IP,都走一条链路. 2.底层尝试使用sar命令监控两个接口的 ...

  6. iOS-Reactive Cocoa的常见用法

    今天是周末,临近年底,工作上遇到不可抗力,会有点一些变动!这多少会让人有一点静不下来,但需克制,Reactive Cocoa是今天的主角! 废话不多说,今天聊聊Reactive Cocoa的常见使用! ...

  7. UBoot配置编译及Makefile分析

    一. UBoot配置编译初步分析 1. UBoot源码结构 (1)UBoot工程项目中的文件可以分为3类 ① 第1类目录:与处理器体系结构或开发板硬件直接相关 ② 第2类目录:一些通用的函数或驱动程序 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(一)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  9. 【网页设计】第四周 JavaSript

    第四周  JSP 一  JSP概述 含义: Java Server Pages, 广泛使用的服务器端脚本语言之一:(运行在服务器端  BS结构) 由服务器端的JSP引擎执行JSP代码,然后将结果以HT ...

  10. 什么?你还不会身份证号码验证?最全的身份证正则验证js

    话不多说上代码 //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码.出生日期.校验位验证 function cidInfo(code) { var city={11:" ...