STL&&用法集合
.....STL是c++里很强势很好用的一系列容器(函数)之类的,之前一直不太会用,所以总是暴毙。。。。想着快比赛了,是时候理一下这些东西了。
-1、pair
存放两个基本元素的东西
定义方法:
pair<type,type> name
若不定义优先级则默认为第一元素的优先级
0、重载运算符(对于结构体的重载)
#include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b;
int operator + (const node x)const
{
return a+x.a;
}
};
int main()
{
node x={,};
node y={,};
int c=x+y;
printf("%d",c);
return ;
}
譬如+:
返回两个元素的和
#include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b;
node operator + (const node x)const
{
return a+x.a;
}
};
int main()
{
node x={,};
node y={,};
int c=x+y;
printf("%d",c);
return ;
}
1、queue(队列)(头文件:queue)(多用于广搜)
第一个当然是队列了。
定义方法:
queue <类型> 名称
其中类型可以是各种各样的东西,包括结构体,pair,等。
使用方法:以下队列名称全部用q
q.push(a);//向队列的尾部塞一个元素a
q.pop();//弹掉队列的元素
q.front()//返回队头元素的值
q.size()//返回队列长度(元素个数)
q.emoty()//判断队列是否为空
2、deque(双端队列)(头文件:deque(这玩意还要一个头文件....))(多用于SPFA之SLF优化)
定义方法:
deque <类型> 名称
同上,类型也很多。
使用方法:(名称为q)
q.push_back(a);//向队尾塞一个元素a
q.push_front(a);//向队头塞一个元素a
q.pop_back();//删除队尾元素
q.pop_front();//删除队头元素
q.front()//返回队尾元素
q.back()//返回队头元素
q.empty()//判断队列是否为空,若空则返回1,否则0
q.size()//返回队列长度
q.clear()//清空队列
3、priority_queue(优先队列,堆)(头文件:queue)
c++STL强大的首体验
用于维护一个序列的大小,可以理解为自动排序,本质是一个二叉堆,内部严格遵守堆顶优先级最大(也就是值最小,在大根堆里)
定义方法:
priority_queue < 类型 > 名称
更一般地,定义使用这种方法:
priority_queue < type , vector < type > cmp > q;
此为priority_queue的标准定义,队列类型,动态数组类型,优先级
可以省略为上面那个类型,对priority_queue只定义类型,而第二个类型默认为vector。
注意:这样貌似只能定义一个大根堆(把优先级靠后,也就是大的值往后排),node要重载运算符||cmp(好吧还是重载运算符),pair的话自动用第一个元素的值排序
更广泛的写法(更好用,也就是自己定义优先级)
struct cmp
{
bool operator()(int a,int b)
{
return a<b;//想干的事
}
};
priority_queue < int , vector < int > , cmp > q ;
谈谈基本操作:
q.push(a);//塞a
q.pop();//弹队头,也就是堆顶
q.top();//返回堆顶值
q.empty()//同上
q.size()//队列长度
4、map(映射)(头文件:map)
有点类似于桶,可以用于直接hash
谈谈定义:
map < type1 , type2 > m;
两个type可以相同, 但type1只能为基础数据结构,type2可以是结构体
谈谈用法:(下称m)
塞元素:
常用数组法:m[a]=b;a是第一关键字; m.size(),返回元素个数(总共多少个map,并不是严格元素个数)
5、vector(动态数组)(头文件vector)
一个可以动态改变内存的数组,常用于建图。
定义方法:
vector < type > name;
type可以是结构体,name后面也可以跟[n],表示二维数组。
vector < type > :: iterator it;
定义一个迭代器用于各种操作
注意,查询是从0开始
谈谈用法(下称g)
它可以像普通数组一样进行操作
vector < int > :: iterator it
g.push_back(a) //在数组的最后添加一个元素a
g.pop_back() //去掉数组的最后一个数据
g.front() //返回第一个元素(栈顶元素)
g.begin() //得到数组头的指针,用迭代器接受
g.end() //得到数组的最后一个单元+1的指针,用迭代器接受
g.clear() // 移除容器中所有数据
g.empty() //判断容器是否为空
g.erase(it) //删除it位置的数据
g.erase(beg,end)// 删除[beg,end)区间的数据(beg,end是地址,不是下标)
g.size() //回容器中实际数据的个数
g.insert(it,a) //在it处插入数据
6、set(集合)(头文件:set)
说是集合,其实它是一个封装了红黑树(一种非严格自平衡平衡树)的容器。
说它是集合因为它不能装重复的元素(可以达到去重的效果(话说有你我要unique干啥))
其实也有能装重复元素的东西,下面介绍。
定义:
set < type > name;
因为它是一个平衡树,所以有比较,所以如果是结构体类型的话需要重载运算符。
用法:(下称s)五花八门,十分方便
基础用法:
s.insert(a)//塞元素a,自排序
s.begin()//返回set容器的第一个元素
s.end()//返回set容器的最后一个元素
s.clear()//删除set容器中的所有的元素
s.empty()//判断set容器是否为空
s.max_size()//返回set容器可能包含的元素最大个数
s.size()//返回当前set容器中的元素个数
花哨(实用):
s.count(a)//查找元素a出现的个数(虽然就1....)
s.erase(it)//删除it处的元素,it是迭代器
s.find(a)//查找a元素,找到返回地址,找不到返回s.end();
s.lower_bound(a)//查找第一个大于等于a的元素,返回地址
s.upper_bound(a)//查找第一个小于等于a的元素,返回地址
有了这一堆,能够省很多事,但是要慎用,毕竟STL常数不小.....
STL&&用法集合的更多相关文章
- 算法拾遗[4]——STL用法
主要bb一下优先队列和字符串吧. 哦还有 bitset. 优先队列 定义很容易: priority_queue<int> pq; 内部是一个堆. 基本操作 pq.top() 取堆顶元素; ...
- STL set集合用法总结(multiset)
2017-08-20 15:21:31 writer:pprp set集合容器使用红黑树的平衡二叉树检索树,不会将重复键值插入,检索效率高 logn 检索使用中序遍历,所以可以将元素从小到大排列出来 ...
- 【STL】集合运算
STL中有可以实现交集.并集.差集.对称差集的算法. 使用前需要包含头文件: #include <algorithm> 注:使用计算交集和并集的算法必须保证参与运算的两个集合有序!!! 交 ...
- STL用法整理
百度百科 STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称.从根本上说,STL是一些“容器”的集合,这些“容器”有list,vect ...
- STL用法大全
1. 概述 泛型编程思想最早缘于A.Stepanov提出的部分算法可独立于数据结构的论断.20世纪90年代初A.Stepanov和Meng Lee根据泛型编程的理论用C++共同编写了STL.但直 ...
- STL语法——集合:set 安迪的第一个字典(Andy's First Dictionary,UVa 10815)
Description Andy, , has a dream - he wants to produce his very own dictionary. This is not an easy t ...
- C++ STL Set 集合
前言 set是STL中的一种关联容器.集合具有无序性,互异性等特点.熟练使用STL中的set模板类,可以比较简单的解决一些编程问题. 关联容器:元素按照关键字来保存和访问,STL中的map,set就是 ...
- STL的集合set
集合: 集合是由元素组成的一个类,其成员可以是一个集合,也可以是一个原子,通常一个元素在一个集合中不能多次出现:由于对实现集合不是很理解,只简单写下已有的STL中的set集合使用: C++中set基本 ...
- (转)C++ STL set() 集合
set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实 ...
随机推荐
- 我的Spring Boot学习记录(二):Tomcat Server以及Spring MVC的上下文问题
Spring Boot版本: 2.0.0.RELEASE 这里需要引入依赖 spring-boot-starter-web 这里有可能有个人的误解,请抱着怀疑态度看. 建议: 感觉自己也会被绕晕,所以 ...
- Windows搭建SVN服务器
安装 1.下载地址:https://www.visualsvn.com/files/VisualSVN-Server-4.0.3-x64.msi 2.开始安装: 3.安装配置: 4.Next直到完成 ...
- 点集配准技术(ICP、RPM、KC、CPD)
在计算机视觉和模式识别中,点集配准技术是查找将两个点集对齐的空间变换过程.寻找这种变换的目的主要包括:1.将多个数据集合并为一个全局统一的模型:2.将未知的数据集映射到已知的数据集上以识别其特征或估计 ...
- 全球首个开放应用模型 OAM 开源 | 云原生生态周报 Vol. 23
作者 | 临石.元毅.冬岛.衷源.天元 业界要闻 全球首个开放应用模型 OAM 开源 2019 年 10 月 17 日,阿里巴巴合伙人.阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon ...
- selenium3与Python3实战 web自动化测试框架 ☝☝☝
selenium3与Python3实战 web自动化测试框架 selenium3与Python3实战 web自动化测试框架 学习 教程 一.环境搭建 1.selenium环境搭建 Client: py ...
- 机器学习:weka中添加自己的分类和聚类算法
不管是实验室研究机器学习算法或是公司研发,都有需要自己改进算法的时候,下面就说说怎么在weka里增加改进的机器学习算法. 一 添加分类算法的流程 1 编写的分类器必须继承 Classifier或是Cl ...
- 关于Mapper.xml生效的问题
昨天在新建Springboot启动后,发现执行相关的SQL报错,具体报错信息如下: org.apache.ibatis.binding.BindingException: Invalid bound ...
- iOS开发请您把握现在 — 面向未来学习
iOS开发请您把握现在 — 面向未来学习 这一篇文章,如果你是一名iOS开发正好也处于开发晋升瓶颈迷茫期,不妨停下你的脚步,花五分钟看看,兴许有你需要的!文章结尾有彩蛋 群里常见的唱哀 iOS现在到底 ...
- L2-007. 家庭房产(并查集)
#include <cstdio> #include <set> #include <vector> #include <algorithm> usin ...
- Java NIO之Java中的IO分类
前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...