.....STL是c++里很强势很好用的一系列容器(函数)之类的,之前一直不太会用,所以总是暴毙。。。。想着快比赛了,是时候理一下这些东西了。

-1、pair

存放两个基本元素的东西

定义方法:

  1. pair<type,type> name

若不定义优先级则默认为第一元素的优先级

0、重载运算符(对于结构体的重载)

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. int a,b;
  6. int operator + (const node x)const
  7. {
  8. return a+x.a;
  9. }
  10. };
  11. int main()
  12. {
  13. node x={,};
  14. node y={,};
  15. int c=x+y;
  16. printf("%d",c);
  17. return ;
  18. }

譬如+:

返回两个元素的和

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. int a,b;
  6. node operator + (const node x)const
  7. {
  8. return a+x.a;
  9. }
  10. };
  11. int main()
  12. {
  13. node x={,};
  14. node y={,};
  15. int c=x+y;
  16. printf("%d",c);
  17. return ;
  18. }

1、queue(队列)(头文件:queue)(多用于广搜)

第一个当然是队列了。

定义方法:

  1. queue <类型> 名称

其中类型可以是各种各样的东西,包括结构体,pair,等。

使用方法:以下队列名称全部用q

  1. q.push(a);//向队列的尾部塞一个元素a
  2. q.pop();//弹掉队列的元素
  3. q.front()//返回队头元素的值
  4. q.size()//返回队列长度(元素个数)
  5. q.emoty()//判断队列是否为空

2、deque(双端队列)(头文件:deque(这玩意还要一个头文件....))(多用于SPFA之SLF优化)

定义方法:

  1. deque <类型> 名称

同上,类型也很多。

使用方法:(名称为q)

  1. q.push_back(a);//向队尾塞一个元素a
  2. q.push_front(a);//向队头塞一个元素a
  3. q.pop_back();//删除队尾元素
  4. q.pop_front();//删除队头元素
  5. q.front()//返回队尾元素
  6. q.back()//返回队头元素
  7. q.empty()//判断队列是否为空,若空则返回1,否则0
  8. q.size()//返回队列长度
  9. q.clear()//清空队列

3、priority_queue(优先队列,堆)(头文件:queue)

c++STL强大的首体验

用于维护一个序列的大小,可以理解为自动排序,本质是一个二叉堆,内部严格遵守堆顶优先级最大(也就是值最小,在大根堆里)

定义方法:

  1. priority_queue < 类型 > 名称

更一般地,定义使用这种方法:

  1. priority_queue < type , vector < type > cmp > q;

此为priority_queue的标准定义,队列类型,动态数组类型,优先级

可以省略为上面那个类型,对priority_queue只定义类型,而第二个类型默认为vector。

注意:这样貌似只能定义一个大根堆(把优先级靠后,也就是大的值往后排),node要重载运算符||cmp(好吧还是重载运算符),pair的话自动用第一个元素的值排序

更广泛的写法(更好用,也就是自己定义优先级)

  1. struct cmp
  2. {
  3. bool operator()(int a,int b)
  4. {
  5. return a<b;//想干的事
  6. }
  7. };
  8. priority_queue < int , vector < int > , cmp > q ;

谈谈基本操作:

  1. q.push(a);//塞a
  2. q.pop();//弹队头,也就是堆顶
  3. q.top();//返回堆顶值
  4. q.empty()//同上
  5. q.size()//队列长度

4、map(映射)(头文件:map)

有点类似于桶,可以用于直接hash

谈谈定义:

  1. map < type1 , type2 > m;
  2. 两个type可以相同, type1只能为基础数据结构,type2可以是结构体

谈谈用法:(下称m)

  1. 塞元素:
  2. 常用数组法:m[a]=b;a是第一关键字;
  3.  
  4. m.size(),返回元素个数(总共多少个map,并不是严格元素个数)

5、vector(动态数组)(头文件vector)

一个可以动态改变内存的数组,常用于建图。

定义方法:

  1. vector < type > name;
  2. type可以是结构体,name后面也可以跟[n],表示二维数组。
    vector < type > :: iterator it;
    定义一个迭代器用于各种操作

注意,查询是从0开始

谈谈用法(下称g)

  1. 它可以像普通数组一样进行操作
  2. vector < int > :: iterator it
  3. g.push_back(a) //在数组的最后添加一个元素a
  4. g.pop_back() //去掉数组的最后一个数据
  5. g.front()     //返回第一个元素(栈顶元素)
  6. g.begin() //得到数组头的指针,用迭代器接受
  7. g.end() //得到数组的最后一个单元+1的指针,用迭代器接受
  8. g.clear() // 移除容器中所有数据
  9. g.empty() //判断容器是否为空
  10. g.erase(it) //删除it位置的数据
  11. g.erase(beg,end)// 删除[beg,end)区间的数据(beg,end是地址,不是下标)
  12. g.size() //回容器中实际数据的个数
  13. g.insert(it,a) //在it处插入数据

6、set(集合)(头文件:set)

说是集合,其实它是一个封装了红黑树(一种非严格自平衡平衡树)的容器。

说它是集合因为它不能装重复的元素(可以达到去重的效果(话说有你我要unique干啥))

其实也有能装重复元素的东西,下面介绍。

定义:

  1. set < type > name;
  2. 因为它是一个平衡树,所以有比较,所以如果是结构体类型的话需要重载运算符。

用法:(下称s)五花八门,十分方便

基础用法:

  1. s.insert(a)//塞元素a,自排序
  2. s.begin()//返回set容器的第一个元素
  3. s.end()//返回set容器的最后一个元素
  4. s.clear()//删除set容器中的所有的元素
  5. s.empty()//判断set容器是否为空
  6. s.max_size()//返回set容器可能包含的元素最大个数
  7. s.size()//返回当前set容器中的元素个数

花哨(实用):

  1. s.count(a)//查找元素a出现的个数(虽然就1....)
  2. s.erase(it)//删除it处的元素,it是迭代器
  3. s.find(a)//查找a元素,找到返回地址,找不到返回s.end();
  4. s.lower_bound(a)//查找第一个大于等于a的元素,返回地址
  5. s.upper_bound(a)//查找第一个小于等于a的元素,返回地址

有了这一堆,能够省很多事,但是要慎用,毕竟STL常数不小.....

STL&&用法集合的更多相关文章

  1. 算法拾遗[4]——STL用法

    主要bb一下优先队列和字符串吧. 哦还有 bitset. 优先队列 定义很容易: priority_queue<int> pq; 内部是一个堆. 基本操作 pq.top() 取堆顶元素; ...

  2. STL set集合用法总结(multiset)

    2017-08-20 15:21:31 writer:pprp set集合容器使用红黑树的平衡二叉树检索树,不会将重复键值插入,检索效率高 logn 检索使用中序遍历,所以可以将元素从小到大排列出来 ...

  3. 【STL】集合运算

    STL中有可以实现交集.并集.差集.对称差集的算法. 使用前需要包含头文件: #include <algorithm> 注:使用计算交集和并集的算法必须保证参与运算的两个集合有序!!! 交 ...

  4. STL用法整理

    百度百科 STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称.从根本上说,STL是一些“容器”的集合,这些“容器”有list,vect ...

  5. STL用法大全

    1.    概述 泛型编程思想最早缘于A.Stepanov提出的部分算法可独立于数据结构的论断.20世纪90年代初A.Stepanov和Meng Lee根据泛型编程的理论用C++共同编写了STL.但直 ...

  6. 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 ...

  7. C++ STL Set 集合

    前言 set是STL中的一种关联容器.集合具有无序性,互异性等特点.熟练使用STL中的set模板类,可以比较简单的解决一些编程问题. 关联容器:元素按照关键字来保存和访问,STL中的map,set就是 ...

  8. STL的集合set

    集合: 集合是由元素组成的一个类,其成员可以是一个集合,也可以是一个原子,通常一个元素在一个集合中不能多次出现:由于对实现集合不是很理解,只简单写下已有的STL中的set集合使用: C++中set基本 ...

  9. (转)C++ STL set() 集合

    set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树——红黑树实 ...

随机推荐

  1. 小程序webview跳转页面后没有返回按钮完美解决方案

    随着小程序越来越火爆,使一个产品如果只有公众号H5页面和APP显得不怎么完美,总感觉不搭上小程序这趟流量车,就会少了点什么,心里别扭地很.在此驱动下,我所在公司也决定赶紧上车. 但是,如果要按照小程序 ...

  2. X-扫描线算法

    多边形的扫描转换 多边形有两种重要的表示方法:顶点表示和点阵表示 顶点表示是用多边形的顶点序列来表示多边形.这种表示直观.几何意义强.占内存少,易于进行几何变换. 但由于它没有明确指出哪些象素在多边形 ...

  3. Redis 的底层数据结构(整数集合)

    当一个集合中只包含整数,并且元素的个数不是很多的话,redis 会用整数集合作为底层存储,它的一个优点就是可以节省很多内存,虽然字典结构的效率很高,但是它的实现结构相对复杂并且会分配较多的内存空间. ...

  4. unittest执行用例方法

    #coding=utf-8 from selenium import webdriver from time import sleep import unittest#导入unittest库 impo ...

  5. 让你如“老”绅士般编写 Python 命令行工具的开源项目:docopt

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  6. [BZOJ2724] 蒲公英

    题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多小朋友也被它杀掉了.我觉得把那么可怕 ...

  7. gitlab 提交

    gitlab 提交 Git global setup git config --global user.name "lial" git config --global user.e ...

  8. <Machine Learning - 李宏毅> 学习笔记

    <Machine Learning - 李宏毅> 学习笔记 b站视频地址:李宏毅2019国语 第一章 机器学习介绍 Hand crafted rules Machine learning ...

  9. GCC常用参数详解

    转载:http://www.cnblogs.com/zhangsir6/articles/2956798.html 简介gcc and g++现在是gnu中最主要和最流行的c & c++编译器 ...

  10. Java中数组操作 java.util.Arrays 类常用方法的使用

    任何一门编程语言,数组都是最重要和常用的数据结构之一,但不同的语言对数组的构造与处理是不尽相同的. Java中提供了java.util.Arrays 类能方便地操作数组,并且它提供的所有方法都是静态的 ...