STL库全解
2024-03-09 14:42:53
发布于:浙江
经过我两天半的整理,这篇STL终于是被我水肝出来了
由于这篇可能比较长,所以大家耐心看哈,接下来正片开始。
概念
首先我们要搞清楚STL库是什么,不知道是什么怎么学对吧,它其实是这么个玩意
STL,学名Standard Template Library,一般我们称他为标准模板库,是一系列软件的统称。
从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map一大堆,STL也是算
法和其他一些组件的集合。比如说<algorithm>中sort函数、<string>中string类都
是STL的内容。
有没有一种熟悉的感觉?其实我们常用的代码中本身就能用到很多,是比较常见的,接下来我就详细地讲一下STL库中有什么好用的玩意
1.快速排序
要说到排序,我相信大部分人第一个想到的就是快排,毕竟这玩意不但代码短小,还快,偷懒神器一个
虽然大家都很熟,但我还是讲一下吧
头文件#include<algorithm>
基本格式sort(要排序元素的起始地址,要排序元素的结束地址,比较函数);
举个例子(题目传送门)
这道题就可以使用快排
#include<algorithm>
#include<iostream>
using namespace std;
int main()
{
int n,a[105]={0};
cin>>n;
for(int i=0;i<n;i++)
cin>>a[i];
sort(a,a+n);//n是数组的元素个数,这里a为数组的开头,a+n就等于排序到数组的第n个元素
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
}
还有进阶用法,cmp函数(降序使用方法)
可以直接加入下面这个函数(题懒得出了)
bool cmp(int x,int y)
{
if(x>y)
return true;//降序
return false;
}
如果是结构体排序就可以将cmp中的变量改为结构体再依次比较
优质题目(ACGO)
A7961.【快速排序】升序
CP003325.第k小整数
CP003320.购买武器
2.map
头文件#include<map>
简单介绍一下
map是STL的一个关联容器,它提供一对一的hash。
第一个可以称为关键字(key),每个关键字只能在map中出现一次;
第二个可能称为该关键字的值(value);
举个例子
#include<map>
#include<iostream>
using namespace std;
int main()
{
map<string,string> m;
m["S"]="TL";//将S定义成TL
cout<<"S: "<<m["S"]; //输出
}
简单粗暴地说,map就是一个可以定义变量名类型和数据类型的东西
3.set
头文件#include<set>
基本概念
set就是集合的意思,集合的特点就是不会出现重复的内容。一般用来作查重或去重操作,可以自动排序、去重
定义格式
set<储存的类型> 容器名
基本操作方式
//常用函数(必学)
insert()//插入元素
count()//判断容器中是否存在某个元素
size()//返回容器的尺寸,也可以元素的个数
erase()//删除集合中某个元素
clear()//清空集合
empty()//判断是否为空
begin()//返回第一个节点的迭代器
end()//返回最后一个节点加1的迭代器
rbegin()//反向迭代器
rend()//反向迭代器
//功能函数(进阶)
find()//查找某个指定元素的迭代器
lower_bound()//二分查找第一个不小于某个值的元素的迭代器
get_allocator()//返回集合的分配器
swap()//交换两个集合的变量
max_size()//返回集合能容纳元素的最大限值
这个东西不怎么常用,但好用起来是真的好用,给个题
CP002738.[NOIP2006 普及组] 明明的随机数
适合set
先到这里,下次更新
全部评论 3
升序好像不能用std::sort做,而且求第k小整数是用到set的
2024-05-12 来自 广东
0顶
2024-05-12 来自 浙江
0e
2024-03-09 来自 广东
0
有帮助,赞一个